Has*_*sen 3 javascript arrays object
有很多类似的问题,但我无法得到他们的答案。
let obj = {};
const key;//a string
const value;//a string
obj[key].push(value);
Run Code Online (Sandbox Code Playgroud)
显然这是行不通的,但我不知道该怎么做。我希望它添加一个新的键和值(如果不存在),但是如果确实存在,则应将其附加到该特定键的值的末尾。即像普通的数组推动作。
预期的行为:
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']}
Run Code Online (Sandbox Code Playgroud)
关键字“ 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)Run Code Online (Sandbox Code Playgroud)
你也可以使用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)Run Code Online (Sandbox Code Playgroud)