我有一个函数需要一个JSON对象,并用一个初始元素创建一个新数组,或者将一个元素添加到该数组(如果已经存在):

function pushOrCreate(jsonObj,arrayName,newElement){
    if(jsonObj.hasOwnProperty(arrayName)){
        jsonObj[arrayName].push(newElement);
    }
    else{
        jsonObj[arrayName]=[newElement];
    }
}

这是对此功能的测试:
var taskAttributesText='{'+
'"abc":"123",'+
'"xyz":"hello"'+
'}';
var taskAttributes=JSON.parse(taskAttributesText);
pushOrCreate(taskAttributes,"workers","xx8238429");
pushOrCreate(taskAttributes,"workers","aa238232");
console.log(JSON.stringify(taskAttributes));

该功能正常工作,但是我认为必须有一种更简单的方法来完成此“推入或创建”操作-似乎Java中有一种单行解决方案。有没有更简单的方法可以做到这一点?

最佳答案

Forget IFs。如何破坏分配和默认值-

const pushOrCreate = (key, { [key]:arr = [], ...o }, v) =>
  ({ ...o, [key]: [...arr, v] })

console.log(pushOrCreate('foo', {}, 1))
// { foo: [ 1 ] }

console.log(pushOrCreate('foo', {foo: [1]}, 2))
// { foo: [ 1, 2 ] }

09-30 15:54