Javascript - 检查密钥是否存在 - 如果不创建密钥,则全部在一行

时间:2016-06-26 00:31:50

标签: javascript

我正在寻找一种检查密钥是否存在以及是否不创建密钥的单行方式。

var myObject = {};

//Anyway to do the following in a simpler fashion?

if (!('myKey' in myObject))
{
    myObject['myKey'] = {};
}

8 个答案:

答案 0 :(得分:21)

短路评估:

url_for

答案 1 :(得分:8)

ScrollView

答案 2 :(得分:5)

注释: 我通常更喜欢@Nindaff@MoustafaS提供的答案,具体取决于具体情况。

为了完整性,您可以使用Object.assign为任何不存在的密钥创建键/值。当您具有要使用的默认选项/设置时,这非常有用,但允许用户通过参数覆盖。它看起来像这样:

var myObject = {};
myObject = Object.assign( { 'myKey':{} }, myObject );

这里输出的内容相同:



var obj = {};
console.log( 'initialized:', obj);


obj = Object.assign( {'foo':'one'}, obj );
console.log( 'foo did not exist:', obj );

obj = Object.assign( {'foo':'two'}, obj );
console.log( 'foo already exists:', obj );


delete obj.foo;
obj = Object.assign( {'foo':'two'}, obj );
console.log( 'foo did not exist:', obj );




注意: Object.assign 在IE中不可用,但有一个Polyfill

答案 3 :(得分:2)

您可以使用hasOwnProperty或typeof来检查退出或取消定义...

答案 4 :(得分:1)

您可以使用Object.keys()Object.hasOwnProperty()



var key = {myKey:{}}, prop = Object.keys(key).pop(), myObject = {}; if (!myObject.hasOwnProperty(prop)) {myObject[prop] = key[prop]}
console.log(myObject)




答案 5 :(得分:0)

指定的Proxy内部类型适合此任务:

const myObj = new Proxy({}, {
  get (target, key) {
    return target.hasOwnProperty(key) && target[key] || (target[key] = {});
  }
});

typeof myObj.foo === 'object' && (myObj.bar.quux = 'norf') && myObj.bar.quux === 'norf';

答案 6 :(得分:0)

如果要获取某个键的值 并为该键插入一个新的默认值 ,如果它不存在并返回该默认值,则在这里,您只需一行:

> x = {}
{}
> x['k']
undefined
> x['k'] || (x['k'] = 23) // Insert default value for non-existent key
23
> x['k']
23
> x['z'] = 5
5
> x['z'] || (x['z'] = 42) // Will not insert default value because key exists
5

答案 7 :(得分:0)

JavaScript ES9 (ECMAScript 2018) 引入了扩展运算符:

6

myObject={myKey: {}, ...myObject} 如果尚不存在,则将被创建,但如果存在则不会被覆盖。例如:

myKey