操纵数组的对象属性

时间:2019-04-02 11:29:21

标签: javascript

我有一些具有某些属性的对象数组。我想对对象属性做一些数学运算,并希望也返回一个数组。

我尝试过,似乎没有用。

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'
}]

4 个答案:

答案 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);