Изменить значения объекта в массиве объектов - PullRequest
0 голосов
/ 01 ноября 2018

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

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 голосов
/ 01 ноября 2018

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 голосов
/ 01 ноября 2018

Вы можете сделать:

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 голосов
/ 01 ноября 2018

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

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);
0 голосов
/ 01 ноября 2018

Вы можете обновить 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 голосов
/ 01 ноября 2018

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

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

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

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

Lloyd

0 голосов
/ 01 ноября 2018

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...