Изменить значения объекта в массиве объектов

1

У меня есть массив объектов, который выглядит так:

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]

Как сопоставить массив объектов, чтобы получить ожидаемый результат, как описано выше.

Благодарю.

  • 0
    Почему ваши tax значения являются строками (а не числами)?
  • 0
    Вы хотите новый массив с новыми объектами или точно так же с мутированным реквизитом?
Показать ещё 2 комментария
Теги:
ecmascript-6
arrays

6 ответов

0
Лучший ответ

Вы можете сопоставить новые объекты с требуемыми значениями.

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);
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);
  • 0
    Это добавляет дополнительную tax собственность к каждому объекту.
  • 0
    Это не должно делать. Посмотрите на возвращенный массив. Поскольку он использует оператор распространения, он не добавил еще одну налоговую собственность. medium.com/front-end-hacking/...
Показать ещё 3 комментария
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);
0

Вы очень близки к правильному решению, см. Ниже:

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

Вам нужно вернуть измененный объект, иначе он будет перезаписан.

Надеюсь это поможет

Lloyd

  • 0
    Ах понятно. Глупый я. Благодарю.
  • 2
    этот подход изменяет исходный объект, потому что он присваивает новое значение tax . пожалуйста, посмотрите на arr1 .
Показать ещё 2 комментария
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);
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);
  • 0
    Мне интересно узнать, для чего используется + ?
  • 0
    Это унарный плюс (+) оператор для преобразования string в number

Ещё вопросы

Сообщество Overcoder
Наверх
Меню