使用 Object.assign 并更有效地传播对象
Using Object.assign and object spread more efficiently
我正在努力实现以下目标:
假设我有一个这样的对象:
myObj = {
john: {1: ['a', 'b',..], 2: ['aa', 'vv',...],
tom: {1: ['ab', 'bb',..], 2: ['aa', 'vv',...],
}
为了实现上述目标,我正在做类似的事情
function (name, myNum, myList) {
let myObj = Object.assign({}, state);
// name and myNum and myList values are passed in for this eg i am
// hardcoding
let name = 'jon';
let myNum = 1;
let mylist = [1,2,3];
// I want to replace the if / else with a more elegant solution
if (myObj.hasOwnProperty(name)) {
myObj[name][myNum] = myList;
} else {
myObj[name] = {[myNum]: myList};
}
return myObj;
}
我相信有更简洁的方法可以做到这一点,使用 Object.assign 或对象传播。
请指教更好的方法。
也许您正在寻找
myObj[name] = Object.assign(myObj[name] || {}, {[myNum]: myList});
你也可以
myObj[name] = {...myObj[name], [myNum]: myList};
但这总是会创建一个新对象。
您也可以将所有内容组合成一个表达式:
function (name, myNum, myList) {
return {
...state,
[name]: {
...state[name],
[myNum]: myList,
},
};
}
我正在努力实现以下目标: 假设我有一个这样的对象:
myObj = {
john: {1: ['a', 'b',..], 2: ['aa', 'vv',...],
tom: {1: ['ab', 'bb',..], 2: ['aa', 'vv',...],
}
为了实现上述目标,我正在做类似的事情
function (name, myNum, myList) {
let myObj = Object.assign({}, state);
// name and myNum and myList values are passed in for this eg i am
// hardcoding
let name = 'jon';
let myNum = 1;
let mylist = [1,2,3];
// I want to replace the if / else with a more elegant solution
if (myObj.hasOwnProperty(name)) {
myObj[name][myNum] = myList;
} else {
myObj[name] = {[myNum]: myList};
}
return myObj;
}
我相信有更简洁的方法可以做到这一点,使用 Object.assign 或对象传播。
请指教更好的方法。
也许您正在寻找
myObj[name] = Object.assign(myObj[name] || {}, {[myNum]: myList});
你也可以
myObj[name] = {...myObj[name], [myNum]: myList};
但这总是会创建一个新对象。
您也可以将所有内容组合成一个表达式:
function (name, myNum, myList) {
return {
...state,
[name]: {
...state[name],
[myNum]: myList,
},
};
}