有很多类似的问题,但我找不到他们的答案。
let obj = {};
const key;//a string
const value;//a string
obj[key].push(value);
显然这行不通,但我不知道该怎么做。如果它不存在,我希望它添加一个新的键和值,但如果它确实存在,它应该将它附加到该特定键的值的末尾。即像数组的正常推送操作。
预期行为:
key = 'hello'
value = 'thanks'
obj = {'hello' : ['thanks']}
key = 'goodbye'
value = 'ok'
obj = {'hello' : ['thanks'], 'goodbye' : ['ok']}
key = 'hello'
value = 'why'
obj = {'hello' : ['thanks','why'], 'goodbye' : ['ok']}
值“why”附加到键“hello”的末尾。
编辑:所有值都放入数组中。
最佳答案
您可以为此创建自定义函数来检查对象中是否存在键,并根据该键直接设置值或将其转换为数组。
let obj = {
foo: 'bar'
};
let add = (obj, key, val) => {
if (key in obj) obj[key] = [].concat(obj[key], val);
else obj[key] = val;
}
add(obj, 'foo', 'baz');
add(obj, 'bar', 'baz');
console.log(obj)
您还可以将 Proxy
与 set
陷阱一起使用,当您尝试在代理对象上设置新属性时,该陷阱将运行。
const obj = {
foo: 'bar'
}
const proxy = new Proxy(obj, {
set(obj, prop, value) {
if (prop in obj) obj[prop] = [].concat(obj[prop], value)
else obj[prop] = value;
}
})
proxy.foo = 'bar';
proxy.bar = 'baz';
console.log(proxy)
关于JavaScript 将值附加到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56455498/