У меня есть массив объектов, который выглядит так:
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]
Как сопоставить массив объектов, чтобы получить ожидаемый результат, как описано выше.
Благодарю.
Вы можете сопоставить новые объекты с требуемыми значениями.
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);
Вы можете обновить 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);
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 arr2 = arr1.map(obj => {
const tax = +Number.parseFloat(obj.tax).toFixed(2);
return { ...obj, tax };
})
console.log(arr2);
Вы очень близки к правильному решению, см. Ниже:
arr1.map(value => {
value.tax = Math.round(value.tax * 100)/100);
return value
});
Вам нужно вернуть измененный объект, иначе он будет перезаписан.
Надеюсь это поможет
Lloyd
tax
. пожалуйста, посмотрите на arr1
.
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);
Ты можешь сделать:
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);
+
?
string
в number
tax
значения являются строками (а не числами)?