我有一个函数,该函数接受一个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中有一种单行解决方案。有更简单的方法吗?
答案 0 :(得分:2)
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 ] }
答案 1 :(得分:1)
只需使用单行条件:
function pushOrCreate(jsonObj,arrayName,newElement){
jsonObj[arrayName] ? jsonObj[arrayName].push(newElement) : jsonObj[arrayName] = [newElement];
}
答案 2 :(得分:1)
您可以使用Ternary Operator
function pushOrCreate(jsonObj,arrayName,newElement){
jsonObj.hasOwnProperty(arrayName) ? jsonObj[arrayName].push(newElement) : 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));
答案 3 :(得分:0)
在这里您还有另一种选择,但是它不是唯一的,而是有助于消除if-else
块:
function pushOrCreate(jsonObj, arrayName, newElement)
{
jsonObj[arrayName] = jsonObj.hasOwnProperty(arrayName) ? jsonObj[arrayName] : [];
jsonObj[arrayName].push(newElement);
}
var taskAttributesText = '{' + '"abc":"123",' + '"xyz":"hello"' + '}';
var taskAttributes = JSON.parse(taskAttributesText);
pushOrCreate(taskAttributes, "workers", "xx8238429");
pushOrCreate(taskAttributes, "workers", "aa238232");
console.log(taskAttributes);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
但是,如果您仍然希望将其放在一行上,则可以执行以下操作:
function pushOrCreate(jsonObj, arrayName, newElement)
{
(jsonObj[arrayName] = jsonObj.hasOwnProperty(arrayName) ? jsonObj[arrayName] : []).push(newElement);
}