連想配列 - javascript 配列 存在チェック




JavaScriptオブジェクトにキーが存在するかどうかを確認しますか? (13)

ES6ソリューション

Array#someObject.keysます。 指定されたキーがオブジェクトに存在する場合はtrueを返し、存在しない場合はfalseを返します

var obj = {foo: 'one', bar: 'two'};
    
function isKeyInObject(obj, key) {
    var res = Object.keys(obj).some(v => v == key);
    console.log(res);
}

isKeyInObject(obj, 'foo');
isKeyInObject(obj, 'something');

1行の例。

console.log(Object.keys({foo: 'one', bar: 'two'}).some(v => v == 'foo'));

JavaScriptオブジェクトまたは配列に特定のキーが存在するかどうかを確認するにはどうすればよいですか?

キーが存在せず、そのキーにアクセスしようとすると、それはfalseを返しますか? あるいはエラーを投げる?


ここには私が非常に便利であるヘルパー関数があります

このkeyExists(key, search)を使用すると、オブジェクトや配列内のキーを簡単に参照できます。

検索したいキーを渡して、探したいオブジェクト(オブジェクトまたは配列)を検索します。

function keyExists(key, search) {
    if (!search || (search.constructor !== Array && search.constructor !== Object)) {
        return false;
    }
    for (var i = 0; i < search.length; i++) {
        if (search[i] === key) {
            return true;
        }
    }
    return key in search;
}

どうやって使うのですか:

配列内のキーの検索

keyExists('apple', ['apple', 'banana', 'orange']); // true
keyExists('fruit', ['apple', 'banana', 'orange']); // false

オブジェクト内のキーの検索

keyExists('age', {'name': 'Bill', 'age': 29 }); // true
keyExists('title', {'name': 'Jason', 'age': 29 }); // false

かなり信頼性が高く、ブラウザ間でうまく機能しています。


- hasOwnProperty.call(obj, key);を使うことができますhasOwnProperty.call(obj, key);

underscore.js方法 -

if(_.has(this.options, 'login')){
  //key 'login' exists in this.options 
}

_.has = function(obj, key) {
  return hasOwnProperty.call(obj, key);
};

彼らのプロジェクトに含まれているlodashを持っている人のために:
"深い"キーを取得しようとするlodash _.getメソッドがあります:

オブジェクトのパスにある値を取得します。 解決された値が未定義の場合、その場所にdefaultValueが返されます。

var object = { 'a': [{ 'b': { 'c': 3 } }] };

console.log(
  _.get(object, 'a[0].b.c'),           // => 3
  _.get(object, ['a', '0', 'b', 'c']), // => 3
  _.get(object, 'a.b.c'),              // => undefined 
  _.get(object, 'a.b.c', 'default')    // => 'default'
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

これは、そのキーが深いところで定義されているかどうかを効果的にチェックし、そのキーが定義されていない場合、プログラムの流れを損なう可能性のあるエラーをスローしません。


JavaScriptを使った新しい素晴らしいソリューションDestructuring

let obj = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
};

let {key1, key2, key3, key4} = obj;

// key1 = "value1"
// key2 = "value2"
// key3 = "value3"
// key4 = undefined

// Can easily use `if` here on key4
if(!key4) { console.log("key not present"); } // Key not present

JavaScriptの他の使い方をチェックする


回答:

if ("key" in myObj)
{
    console.log("key exists!");
}
else
{
    console.log("key doesn't exist!");
}

説明:

in演算子は、キーがオブジェクトに存在するかどうかをチェックします。 値が未定義であるかどうかを確認した場合: if (myObj["key"] === 'undefined')undefined値を持つオブジェクトにキーが存在する可能性があるため、問題が発生する可能性があります。

そのため、最初にin演算子を使用してinすでに存在することがわかってからキーの内部にある値を比較する方がはるかに優れています。


これは古い質問ですが、私は決して遅く答えを出すことはないと思います。

あなたがオブジェクト "製品"と2つのアイテムを持っていると想像してください。 このオブジェクトにidがすでに存在するかどうかを確認するには、find()を使用します。

products = [
    {
        "id": 1,
        "name": "Name 1"
    },
    {
        "id": 2,
        "name": "Name 2"
    },
  ]

  item1 = 
    {
        "id": 3,
        "name": "Name 3",
    }



  item2 = 
    {
        "id": 1,
        "name": "Name 1",
    }



  if(products.find(x => x.id === item1.id)){
    console.log('id is in products');
  }else {
    console.log('id is not in products');
  }
  if(products.find(x => x.id === item2.id)){
    console.log('id is in products');
  }else {
    console.log('id is not in products');
  }

ログ:

id is not in products
id is in products

これらの例は、異なる方法の違いを示すことができます。 それがあなたのニーズに合ったものを選ぶのを助けてくれることを願っています:

// Lets create object `a` using create function `A`
function A(){};
A.prototype.onProtDef=2;
A.prototype.onProtUndef=undefined;
var a=new A();
a.ownProp = 3;
a.ownPropUndef = undefined;

// Let's try different methods:

a.onProtDef; // 2
a.onProtUndef; // undefined
a.ownProp; // 3
a.ownPropUndef; // undefined
a.whatEver; // undefined
a.valueOf; // ƒ valueOf() { [native code] }

a.hasOwnProperty('onProtDef'); // false
a.hasOwnProperty('onProtUndef'); // false
a.hasOwnProperty('ownProp'); // true
a.hasOwnProperty('ownPropUndef'); // true
a.hasOwnProperty('whatEver'); // false
a.hasOwnProperty('valueOf'); // false

'onProtDef' in a; // true
'onProtUndef' in a; // true
'ownProp' in a; // true
'ownPropUndef' in a; // true
'whatEver' in a; // false
'valueOf' in a; // true (on the prototype chain - Object.valueOf)

Object.keys(a); // ["ownProp", "ownPropUndef"]

オブジェクトの任意の深さでキーをチェックし、偽の値を考慮する場合は、この行をユーティリティ関数と見なしてください:

var keyExistsOn = (o, k) => k.split(".").reduce((a, c) => a.hasOwnProperty(c) ? a[c] || 1 : false, Object.assign({}, o)) === false ? false : true;

結果

var obj = {
    test: "",
    locals: {
        test: "",
        test2: false,
        test3: NaN,
        test4: 0,
        test5: undefined,
        auth: {
            user: "hw"
        }
    }
}

keyExistsOn(obj, "")
> false
keyExistsOn(obj, "locals.test")
> true
keyExistsOn(obj, "locals.test2")
> true
keyExistsOn(obj, "locals.test3")
> true
keyExistsOn(obj, "locals.test4")
> true
keyExistsOn(obj, "locals.test5")
> true
keyExistsOn(obj, "sdsdf")
false
keyExistsOn(obj, "sdsdf.rtsd")
false
keyExistsOn(obj, "sdsdf.234d")
false
keyExistsOn(obj, "2134.sdsdf.234d")
false
keyExistsOn(obj, "locals")
true
keyExistsOn(obj, "locals.")
false
keyExistsOn(obj, "locals.auth")
true
keyExistsOn(obj, "locals.autht")
false
keyExistsOn(obj, "locals.auth.")
false
keyExistsOn(obj, "locals.auth.user")
true
keyExistsOn(obj, "locals.auth.userr")
false
keyExistsOn(obj, "locals.auth.user.")
false
keyExistsOn(obj, "locals.auth.user")
true

このNPMパッケージもhttps://www.npmjs.com/package/has-deep-valuehttps://www.npmjs.com/package/has-deep-value : https://www.npmjs.com/package/has-deep-value


バニラジュース

yourObjName.hasOwnProperty(key) : true ? false;

es2015にオブジェクトが少なくとも1つのプロパティを持っているかどうかを確認したい場合

Object.keys(yourObjName).length : true ? false


未定義のチェックは、キーが存在するかどうかをテストする正確な方法ではありません。 キーが存在しても値が実際にはundefined場合はどうなりますか?

var obj = { key: undefined };
obj["key"] != undefined // false, but the key exists!

代わりに、 in演算子を使用する必要があります。

"key" in obj // true, regardless of the actual value

キーが存在しないかどうかを確認する場合は、括弧を使用してください。

!("key" in obj) // true if "key" doesn't exist in object
!"key" in obj   // ERROR!  Equivalent to "false in obj"

または、特にオブジェクトインスタンスのプロパティ(継承されたプロパティではない)をテストする場合は、 hasOwnProperty使用します。

obj.hasOwnProperty("key") // true

inhasOwnProperty 、およびkeyのメソッドのパフォーマンスを比較する場合は、このjsben.ch/#/WqlIl参照してください。


"key" in obj

配列キーとは非常に異なるオブジェクト属性値のみをテストする可能性があります





object