我想将空对象的值添加到动态接收的正确键上。
显然,下面的操作不起作用,因为我用最新的值替换了该键的现有值:
let obj = {};
let key;
let value;
key = // from selectors
value = // from selectors
obj[key] = value;
我如何"push"这个键的新值,而不是替换它?
例如,如果key1
经过两次迭代后选择了value1
和value2
,则对象的最终结果将是
{"key1": ['value1', 'value2']}
有几种方法可以实现这一点。一种常见的方法是设置obj[key]
等于它自己,如果它是null
/undefined
(即:nullish),则默认为?? []
(nullish coalescing)的空数组,然后使用.concat()
返回一个带有附加值的新数组:
obj[key] = (obj[key] ?? []).concat(value); // ?? can be replaced with `||` for better browser support
或者使用??=
(null coalescing赋值)将obj[key]
设置为空数组(如果它为空),然后将.push()
推入该数组以更新现有数组
(obj[key] ??= []).push(value);
上面的工作是因为如果obj[key]
是undefined
/null
,obj[key] ?? = []
会将obj[key]
设置为[]
,然后返回对存储在obj[key]
的数组的引用,即我们刚刚创建的数组或obj[key]
已经存在的数组。然后我们可以将.push()
转换为数组引用,并在obj
试试这个:
if (obj[key] === undefined) obj[key] = []
obj[key].push(value)
赋值时,直接添加到数组中,如果数组不存在,则创建一个
obj[key] = [...(obj[key] ?? []), value];
obj[key] = (obj[key] ?? []).concat(value);
或
if (!obj[key]) obj[key] = [];
obj[key].push(value);