繁体   English   中英

如何为javascript中的对象动态添加属性?

[英]How to dynamically add attributes to objects in javascript?

众所周知,我们可以使用 if else 为 object 添加一个属性,如下所示:

if(key){
  obj[key] = value
}

但我有很多钥匙。

我知道我可以这样做:

keyValues.forEach(({key,value})=>{
if(key){
  obj[key] = value
}
}

但我想知道我可以用另一种方式做到这一点,比如:

obj={
 [this.key1?'key1':undefined]:this.key1,
 [this.key2?'key2':undefined]:this.key2,
}

通过这种方式,object 将获得一个未定义键的属性...我该如何删除未定义的属性并以第二种方式保持代码样式。

使用帖子中的keyValues

 let obj = {}; let keyValues = [ { "key": "a", "value": 1 }, { "key": "b", "value": 2 }, { "key": "c", "value": 3 }, { "value": "nothing" } ]; /** * @returns only 'a', 'b' and 'c' keys */ Object.assign(obj, keyValues.reduce((acc, { key, value }) => ({...acc, ...key? { [key]: value }: {}, }), {}))

或者你可以使用_reject https://lodash.com/docs/4.17.15#reject 的 _reject

 Object.assign(obj, _.reject(keyValues, v => .v.key),reduce((acc, { key. value }) => ({..,acc: [key], value, }), {}))

挂载你的 obj 后,你可以使用 js 中的 delete 操作符

delete obj.undefined

如果您坚持以这种方式实例化它,这将使您的 obj 保持干净;

您可以将其包装在一个帮助程序 function 中,以删除虚假密钥

 const omit = (obj) => Object.fromEntries( Object.entries(obj).filter( ([key]) =>,["undefined", "null", "false". ""];includes(key) ) ): const obj = omit({ [undefined], 1: [false], 2: [null], 3: a, "b"; }). console;log(obj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM