我有一些具有某些属性的对象数组。我想对对象属性做一些数学运算,并希望也返回一个数组。
我尝试过,似乎没有用。
array.map(el => {
el.count * 2;
return el
})
array = [{
count: 4,
string: 'randomstring'
}, {
count: 9,
string: 'randomstring'
}, {
count: 7,
string: 'randomstring'
}, {
count: 12,
string: 'randomstring'
}]
预期
array = [{
count: 8,
string: 'randomstring'
}, {
count: 18,
string: 'randomstring'
}, {
count: 14,
string: 'randomstring'
}, {
count: 24,
string: 'randomstring'
}]
答案 0 :(得分:5)
el.count * 2;
不会更改el.count
的值,您可以像
el.count = el.count * 2;
但这会带来另一个问题。它将更改原始数据。因此最好使用Spread Operator
返回具有修改后的count
属性的新对象
let array = [{ count: 4, string: 'randomstring' }, { count: 9, string: 'randomstring' }, { count: 7, string: 'randomstring' }, { count: 12, string: 'randomstring' }]
let res = array.map(el => ({...el,count:el.count*2}));
console.log(res);
您也可以Object.assign()
let res = array.map(el => Object.assign({count:el.count*2}));
答案 1 :(得分:3)
您可以映射独立的对象而无需更改原始数组。
newArray = array.map(o => Object.assign({}, o, { count: o.count * 2 }));
与传播对象相同。
newArray = array.map(o => ({ ...o, count: o.count * 2 }));
答案 2 :(得分:1)
没有显式改变对象的值(这就是为什么我们首先使用map,filter和reduce的原因):
array.map(({ count, string }) => (
{ count: count * 2, string }
));
答案 3 :(得分:0)
尝试
array.map(e=>(e.count*=2,e))
let array = [
{ count: 4, string: 'randomstring' },
{ count: 9, string: 'randomstring' },
{ count: 7, string: 'randomstring' },
{ count: 12, string: 'randomstring' }
];
let r = array.map(e=>(e.count*=2,e))
console.log(r);