我有一个函数需要一个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 ] }