修改对象数组中的对象值

时间:2018-11-01 09:43:12

标签: javascript arrays ecmascript-6

我有一个看起来像这样的对象数组:

const arr1 = [
    {id: 1, name: 'Dave', tax: 123.34543}
    {id: 2, name: 'John', tax: 3243.12323}
    {id: 3, name: 'Tom', tax: 122.34324}
]

我正在尝试舍入税值,因此最后数组应如下所示:

[
   {id: 1, name: 'Dave', tax: 123.34}
   {id: 2, name: 'John', tax: 3243.12}
   {id: 3, name: 'Tom', tax: 122.34}
]

我尝试像这样使用map函数:

arr1.map(value => Math.round(value.tax * 100)/100);

但是我得到的不是数组的修改对象数组,而是仅包含Math.round的结果的数组,看起来像这样: [ 123.34, 3243.12, 122.34]

我如何映射对象数组以获得如上所述的预期结果。

谢谢。

6 个答案:

答案 0 :(得分:1)

您非常接近正确的解决方案,请参见下文:

arr1.map(value => {
  value.tax = Math.round(value.tax * 100)/100);
  return value
});

您需要返回更改后的对象,否则它将被覆盖。

希望这会有所帮助

劳埃德

答案 1 :(得分:1)

您可以在tax函数中更新map

请参阅下面的实现。

const arr1 = [
    {id: 1, name: 'Dave', tax: '123.34543'},
    {id: 2, name: 'John', tax: '3243.12323'},
    {id: 3, name: 'Tom', tax: '122.34324'},
];

const taxRoundedArray = arr1.map(item => {
  let tax = Math.round(item.tax * 100)/100
  return {
    ...item,
    tax
  }
});

console.log(taxRoundedArray);

答案 2 :(得分:1)

您可以使用所需值映射新对象。

const
    array = [{ id: 1, name: 'Dave', tax: 123.34543 }, { id: 2, name: 'John', tax: 3243.12323 }, { id: 3, name: 'Tom', tax: 122.34324 }],
    result = array.map(o => Object.assign({}, o, { tax: Math.round(o.tax * 100) / 100 }));
    
console.log(result);

答案 3 :(得分:0)

Array.map处理数组中的条目并返回处理后的值。在尝试中,您只返回了更新的税,但是,您将需要返回对象。尝试关注

const arr1 = [{id: 1, name: 'Dave', tax: 123.34543},{id: 2, name: 'John', tax: 3243.12323},{id: 3, name: 'Tom', tax: 122.34324}];

const arr2 = arr1.map(({tax, ...rest}) => ({...rest, tax: Math.round(tax * 100)/100}));
console.log(arr2);

答案 4 :(得分:0)

您可以这样做:

const arr1 = [
  {id: 1, name: 'Dave', tax: '123.34543'},
  {id: 2, name: 'John', tax: '3243.12323'},
  {id: 3, name: 'Tom', tax: '122.34324'}
];

const result = arr1.map(user => {
  user.tax = (Math.round(+user.tax * 100) / 100);
  return user;
});

console.log(result);

答案 5 :(得分:0)

map遍历数组,并为每个对象返回一个新的税额,该税额已转换为固定为两位小数的浮点数。

const arr1 = [{"id":1,"name":"Dave","tax":"123.34543"},{"id":2,"name":"John","tax":"3243.12323"},{"id":3,"name":"Tom","tax":"122.34324"}];

const arr2 = arr1.map(obj => {
  const tax = +Number.parseFloat(obj.tax).toFixed(2);
  return { ...obj, tax };
})

console.log(arr2);