如何更新数组中对象的所有值?
How do i update all values of an object in an array?
当每个薪水都是一个对象的 属性 并且每个对象都存储在一个数组中时,如何更改所有薪水值并按百分比增加它们?例如。增加 10%,我必须将结果四舍五入到最接近的整数:
raiseSalary([
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
], 10)
上面的调用应该return:
[
{ name: 'Ali', salary: 3300 },
{ name: 'Rob', salary: 2200 },
{ name: 'Adam', salary: 4950 }
]
这是我写的代码:
function raiseSalary(arr, raise) {
if (arr.length === 0) {
return [{}];
} else {
const raiseArray = arr.map((salaryObj) => {
return (salaryObj.salaryObj / 100) * 10;
});
}
}
地图方法应该做你想做的。注意 salaryObj 的解构以避免操纵原始对象。
const percent = 10;
const multiplier = 1 + (percent / 100);
const salaries = [
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
];
const newSalaries = salaries.map((salaryObj) => {
return {
...salaryObj,
salary: salaryObj.salary * multiplier,
};
});
console.log(newSalaries);
let userDetail=[
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
];
function getPercentage(num, percentage){
return num * (percentage / 100);
}
userDetail=userDetail.map(x=> {
return{
...x,
salary:x.salary+getPercentage(x.salary,10)
}
})
console.log(userDetail)
下面介绍的是实现所需 objective 的一种可能方法。
代码段
const addRaise = (arr, pcnt) => (
arr.map(
({ salary, ...rest }) => ({
...rest,
salary: ( +salary * (+pcnt + 100) / 100 )
})
)
);
/*
// method to raise salary by "pcnt" percent
const addRaise = (arr, pcnt) => (
// iterate over array "arr"
arr.map(
// destructure to access "salary"
({ salary, ...rest }) => ({
...rest, // all other props retained as-is
// salary updated to be 10% more than current
salary: ( +salary * (+pcnt + 100) / 100 )
})
)
);
*/
const dataArr = [{
name: "Ali",
salary: 3000
},
{
name: "Rob",
salary: 2000
},
{
name: "Adam",
salary: 4500
},
];
console.log(
'adding raise of 10%...\n',
'new array:\n',
addRaise(dataArr, 10)
);
说明
添加到上面代码段的评论。
你快到了。就几点
- 就像当数组有零个元素时你return一些东西,当它有元素时你必须return一些东西;在这种情况下,修改后的数组
- 通过使用它们的键并提供数据来保留对象,否则,您最终会得到一个只有数字的数组。
- 由于您的目标是将薪水提高
raise
,因此不乘以 raise
,在本例中为 10
,乘以 100+raise
- 您不必 hard-code
raise
因为您将它传递给函数;它允许您在不更改函数的情况下传递 5
、15
或其他一些提升值。
const input = [{ name: "Ali", salary: 3000 }, { name: "Rob", salary: 2000 }, { name: "Adam", salary: 4500 }],
increment = 10;
function raiseSalary(arr, raise) {
if (arr.length === 0) {
return [];
} else {
return arr.map((salaryObj) => {
return ({name:salaryObj.name, salary:(salaryObj.salary / 100) * (100+raise)});
});
}
}
console.log( raiseSalary(input, increment) );
或者...
只return修改后的数组,不检测元素,也可以使用对象解构。
const input = [{ name: "Ali", salary: 3000 }, { name: "Rob", salary: 2000 }, { name: "Adam", salary: 4500 }],
increment = 10;
function raiseSalary(arr, raise) {
return arr.map(({name,salary}) => {
return ({name, salary: salary/100*(100+raise)});
});
}
console.log( raiseSalary(input, increment) );
console.log( raiseSalary([], increment) );
这是一个使用 map
和对象传播的简单方法:
const updateSalaries = (people, pct) => people .map (({salary, ...rest}) => ({
...rest,
salary: Math .round (salary * (100 + pct) / 100)
}))
const people = [{name: "Ali", salary: 3000}, {name: "Rob", salary: 2000}, {name: "Adam", salary: 4500}]
console .log (updateSalaries (people, 10))
.as-console-wrapper {max-height: 100% !important; top: 0}
对于每个元素,我们解构输入以从对象的其余部分提取 salary
,然后创建一个包含其余部分的新结果,但薪水是根据原始薪水和百分比计算得出的调整。
当每个薪水都是一个对象的 属性 并且每个对象都存储在一个数组中时,如何更改所有薪水值并按百分比增加它们?例如。增加 10%,我必须将结果四舍五入到最接近的整数:
raiseSalary([
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
], 10)
上面的调用应该return:
[
{ name: 'Ali', salary: 3300 },
{ name: 'Rob', salary: 2200 },
{ name: 'Adam', salary: 4950 }
]
这是我写的代码:
function raiseSalary(arr, raise) {
if (arr.length === 0) {
return [{}];
} else {
const raiseArray = arr.map((salaryObj) => {
return (salaryObj.salaryObj / 100) * 10;
});
}
}
地图方法应该做你想做的。注意 salaryObj 的解构以避免操纵原始对象。
const percent = 10;
const multiplier = 1 + (percent / 100);
const salaries = [
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
];
const newSalaries = salaries.map((salaryObj) => {
return {
...salaryObj,
salary: salaryObj.salary * multiplier,
};
});
console.log(newSalaries);
let userDetail=[
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
];
function getPercentage(num, percentage){
return num * (percentage / 100);
}
userDetail=userDetail.map(x=> {
return{
...x,
salary:x.salary+getPercentage(x.salary,10)
}
})
console.log(userDetail)
下面介绍的是实现所需 objective 的一种可能方法。
代码段
const addRaise = (arr, pcnt) => (
arr.map(
({ salary, ...rest }) => ({
...rest,
salary: ( +salary * (+pcnt + 100) / 100 )
})
)
);
/*
// method to raise salary by "pcnt" percent
const addRaise = (arr, pcnt) => (
// iterate over array "arr"
arr.map(
// destructure to access "salary"
({ salary, ...rest }) => ({
...rest, // all other props retained as-is
// salary updated to be 10% more than current
salary: ( +salary * (+pcnt + 100) / 100 )
})
)
);
*/
const dataArr = [{
name: "Ali",
salary: 3000
},
{
name: "Rob",
salary: 2000
},
{
name: "Adam",
salary: 4500
},
];
console.log(
'adding raise of 10%...\n',
'new array:\n',
addRaise(dataArr, 10)
);
说明
添加到上面代码段的评论。
你快到了。就几点
- 就像当数组有零个元素时你return一些东西,当它有元素时你必须return一些东西;在这种情况下,修改后的数组
- 通过使用它们的键并提供数据来保留对象,否则,您最终会得到一个只有数字的数组。
- 由于您的目标是将薪水提高
raise
,因此不乘以raise
,在本例中为10
,乘以100+raise
- 您不必 hard-code
raise
因为您将它传递给函数;它允许您在不更改函数的情况下传递5
、15
或其他一些提升值。
const input = [{ name: "Ali", salary: 3000 }, { name: "Rob", salary: 2000 }, { name: "Adam", salary: 4500 }],
increment = 10;
function raiseSalary(arr, raise) {
if (arr.length === 0) {
return [];
} else {
return arr.map((salaryObj) => {
return ({name:salaryObj.name, salary:(salaryObj.salary / 100) * (100+raise)});
});
}
}
console.log( raiseSalary(input, increment) );
或者...
只return修改后的数组,不检测元素,也可以使用对象解构。
const input = [{ name: "Ali", salary: 3000 }, { name: "Rob", salary: 2000 }, { name: "Adam", salary: 4500 }],
increment = 10;
function raiseSalary(arr, raise) {
return arr.map(({name,salary}) => {
return ({name, salary: salary/100*(100+raise)});
});
}
console.log( raiseSalary(input, increment) );
console.log( raiseSalary([], increment) );
这是一个使用 map
和对象传播的简单方法:
const updateSalaries = (people, pct) => people .map (({salary, ...rest}) => ({
...rest,
salary: Math .round (salary * (100 + pct) / 100)
}))
const people = [{name: "Ali", salary: 3000}, {name: "Rob", salary: 2000}, {name: "Adam", salary: 4500}]
console .log (updateSalaries (people, 10))
.as-console-wrapper {max-height: 100% !important; top: 0}
对于每个元素,我们解构输入以从对象的其余部分提取 salary
,然后创建一个包含其余部分的新结果,但薪水是根据原始薪水和百分比计算得出的调整。