JavaScript 将值附加到对象

标签 javascript arrays object

有很多类似的问题,但我找不到他们的答案。

 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)

您还可以将 Proxyset 陷阱一起使用,当您尝试在代理对象上设置新属性时,该陷阱将运行。

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/

相关文章:

javascript - 在网络上启用 Google 帐户选择器

php - PHP:根据另一个数组的值将一个数组拆分为不同大小的 block

php 数组(并删除某些元素)

javascript对象初始化问题

javascript - Ajax添加带有 session id和用户id问题的记录

javascript - 如何使用 jQuery JSON 创建表?

javascript - 在javascript中将十进制打印为二进制

c - 二维结构数组 : The segfaultening

c# - 将对象限制为几种类型

javascript - 从多个对象中获取特定的键和值