我有一个JSON
const myJSON = [
{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
]
在UI中,如果用户想要将5号添加到两个属性中的一个,我该如何处理?
我已经在做
了myJSON.map(x => x[userSelectedProperty] + 5)
// when user selected property is 'LocX', [40, 57]
但我希望完整的数组只更新值。
[
{
name: 'compass',
LocX: 40,
LocY: 312
},
{
name: 'another',
LocX: 57,
LocY: 32
}
]
我该怎么做?
答案 0 :(得分:3)
使用Array#forEcah
方法简单地迭代和更新对象属性,这足以达到此目的。
const myJSON = [{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
];
let userSelectedProperty = 'LocX';
myJSON.forEach(x => x[userSelectedProperty] += 5);
console.log(myJSON);

如果您想创建新数组,请使用Array#map
方法。
const myJSON = [{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
];
let userSelectedProperty = 'LocX';
let res = myJSON.map(x => {
// copy properties to a new object
let y = Object.assign({}, x);
y[userSelectedProperty] += 5;
return y;
});
console.log(res);

答案 1 :(得分:2)
您可以在数组上使用.forEach
循环来更新其中的属性,而不是创建新数组。
const myJSON = [
{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
];
var userSelectedProperty = "LocX";
// Update the array.
myJSON.forEach(t => t[userSelectedProperty] += 5);
console.log(myJSON);

答案 2 :(得分:1)
不需要map
。使用forEach并更新键值
const myJSON = [{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
]
function addNum(key, val) {
myJSON.forEach(function(item) {
item[key] = item[key] + val;
})
}
addNum('LocX', 5)
console.log(myJSON)

答案 3 :(得分:1)
使用Object.assign只需
{{1}}
答案 4 :(得分:1)
尝试以下方法:
const myJSON = [
{
name: 'compass',
LocX: 35,
LocY: 312
},
{
name: 'another',
LocX: 52,
LocY: 32
}
]
var userInput = 5;
var final = myJSON.map((x, i)=>{
return {name:x.name ,LocX:x.LocX+userInput, LocY:x.LocY};
});
console.log(final);