JavaScript将值附加到对象

JavaScript将值附加到对象,javascript,arrays,object,Javascript,Arrays,Object,有很多类似的问题,但我无法得到他们的答案 let obj = {}; const key;//a string const value;//a string obj[key].push(value); 显然这不起作用,但我不知道怎么做。如果它不存在,我希望它添加一个新的键和值,但是如果它确实存在,它应该将它附加到该特定键的值的末尾。ie喜欢阵列的正常推送动作 预期行为: key = 'hello' value = 'thanks' obj = {'hello' : ['thank

有很多类似的问题,但我无法得到他们的答案

 let obj = {};

 const key;//a string
 const value;//a string

 obj[key].push(value);
显然这不起作用,但我不知道怎么做。如果它不存在,我希望它添加一个新的键和值,但是如果它确实存在,它应该将它附加到该特定键的值的末尾。ie喜欢阵列的正常推送动作

预期行为:

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”的末尾

编辑:所有值都放入数组。

尝试(我考虑)

让obj={};
const key='some_key'//一串
常量值='第一个值'//一串
obj[key]=(obj[key]| |[]).concat(值);
obj[key]=(obj[key]| |[]).concat(“下一个值”);

控制台日志(obj)您可以为此创建自定义函数,该函数检查对象中是否存在键,并根据该键直接设置值或将其转换为数组

让obj={
福:“酒吧”
};
让add=(对象、键、值)=>{
如果(输入obj)obj[输入键]=[].concat(输入obj[输入键],值);
else obj[key]=val;
}
加上(obj、‘foo’、‘baz’);
加上(obj、‘bar’、‘baz’);

console.log(obj)
试试这个。然而,这也会将第一个值放入一个数组中,但是如果您知道它将是一个值数组,那么这是一个非常标准的行为

  if(obj[key]){
    obj[key].push(value);
  }
  else{
    obj[key] = [value];
  }

相当简单-使用逻辑OR运算符
|

让obj={};
const key=“key”;
const value=“value”;
obj[key]=obj[key]| |[];
obj[键]。推送(值);
obj[key].push(“另一个值”);
控制台日志(obj)

。作为控制台包装{max height:100%!important;top:auto;}
您可以根据需要创建原型函数

Object.prototype.add=函数(键,值){
如果(此[键]!=未定义)此[键]=[].concat(此[键],值);
否则此[键]=值;
};
让obj={'hello':'Thank','再见':'ok'}
let key='hello'
让值='为什么'
//obj[键]=值;
对象添加(键、值);
console.log(obj)
您也可以通过以下非常简洁的方式完成此操作:

let o={}
让add=(obj,k,v)=>Object.assign(obj,obj[k]
?{[k]:[].concat(obj[k],v)}
:{[k]:v})
控制台日志(添加(o,'a',1))
控制台日志(添加(o,'b',2))
控制台日志(添加(o,'a',3))

console.log(add(o,'a',4))
obj={'hello':'thanking'}
而不是
obj={'hello':['thanking']}
如果您事先知道
hello
将包含多个值,那么您为什么要这样做?@lealcelderior这不是我正在做的,这是预期的输出,因此,如果它将它放入这样的数组中,那么这很好。值保证是字符串吗?如果第一个值是数组,则在第二次加法过程中无法确定原始值是数组还是已转换为数组。@是的,值和键将始终是字符串。例如:
obj.add('key',[1,2])
obj.add('key',1));obj.add('key',2)
生成相同的对象,但是当您再次尝试添加时,必须对它们进行不同的处理。如果您以
{key:“value”}
而不是空对象开始,会怎么样?这将创建
{“key”:[“value”]}
,而不是OP想要的。仅当再次指定属性时,才应创建array@adiga-否-请阅读下文question@KamilKiełczewski只有当你选择以这种方式解释它时@KamilKiełczewski那段代码是个笑话……没有必要过度分析它的正确性。默认情况下,它应该只添加
,而不是
[value]
@adiga-no-阅读下面的问题:为什么所有对象都需要原型函数?您最多可以使用
add
功能创建一个对象,然后执行
object.create(adder)
来派生新的对象。