當每個薪水都是物件的屬性并且每個物件都存盤在陣列中時,如何更改所有薪水值并將它們增加一個百分比?例如增加 10%,我必須將結果四舍五入到最接近的整數:
raiseSalary([
{ name: "Ali", salary: 3000 },
{ name: "Rob", salary: 2000 },
{ name: "Adam", salary: 4500 },
], 10)
上面的呼叫應該回傳:
[
{ 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;
});
}
}
uj5u.com熱心網友回復:
您快到了。只是幾點
- 就像你在陣列有零個元素時回傳一些東西一樣,當它有元素時你必須回傳一些東西;在這種情況下,修改后的陣列
- 通過使用它們的鍵并提供資料來保留物件,否則,您最終會得到一個只有數字的陣列。
- 由于您的目標是到那時加薪,
raise而不是乘以raise,在這種情況下10,乘以100 raise - 您不必硬編碼
raise,因為您將其傳遞給函式;它允許你在不改變你的函式的情況下傳遞5, 或15其他一些 raise 值。
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) );
或者 ...
只需回傳修改后的陣列而不測驗元素,還可以使用物件解構。
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) );
uj5u.com熱心網友回復:
map 方法應該做你想做的事。注意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);
uj5u.com熱心網友回復:
下面介紹的是實作預期目標的一種可能方式。
代碼片段
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)
);
解釋
評論添加到上面的片段。
uj5u.com熱心網友回復:
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從物件的其余部分中提取,然后創建一個包含其余部分的新結果,但其工資是根據原始工資和百分比調整計算得出的。
uj5u.com熱心網友回復:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/485964.html
標籤:javascript 数组 目的
上一篇:回圈一個物件只回傳第一個物件
下一篇:帶有陣列到陣列的打字稿物件
