我有一个对象
usersById: {
1: { name: 'John' },
2: { name: 'Michelle' },
...
}
我想返回相同的对象,但首先使用新属性age
填充id = 2的对象,但坚持不变性。
我猜它会像
return {
...usersById,
...usersById[2].age = 40
}
但收到错误In this environment the sources for assign MUST be an object. This error is a performance optimization and not spec compliant
。
或者,我猜它应该像
return Object.keys(usersById).map(userId => {
if (userId === 2) {
return {
...usersById[2],
...age = 40
}
}
return usersById[userId]
})
但它返回一个数组而不是一个对象。
答案 0 :(得分:3)
你有正确的想法,但错误的语法。试试这个:
function CheckAnswer (answer){
if(Quiz[qpos][5] == answer) {
correctans++;
};
getnextQuestion();
};
function getnextQuestion() {
qpos++;
getQuestions();
};
或者如果密钥是动态的,您可以这样做:
return {
...usersById,
2: {
...usersById[2],
age: 40
}
}
答案 1 :(得分:0)
您可以使用自己的函数返回具有填充值的同一对象
简单示例:
var usersById = {
1: { name: 'John' },
2: { name: 'Michelle' },
}
usersById = oneLevelDeepAssign(usersById,2,{age:21})
function oneLevelDeepAssign(object, key, objectToAssign){
return Object.assign({},object,{[key]:Object.assign({},object[key],objectToAssign)})
}
console.log(usersById);