首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新数组中对象的所有值?

如何更新数组中对象的所有值?
EN

Stack Overflow用户
提问于 2022-06-03 13:55:05
回答 5查看 203关注 0票数 0

如果每个薪资都是对象的属性,并且每个对象都存储在数组中,那么如何更改所有薪资值并将其提高一个百分比?例如,增长了10 %,我不得不把结果乘以最接近的整数:

代码语言:javascript
复制
raiseSalary([
    { name: "Ali", salary: 3000 },
    { name: "Rob", salary: 2000 },
    { name: "Adam", salary: 4500 },
], 10)

上述呼吁应返回:

代码语言:javascript
复制
[
   { name: 'Ali', salary: 3300 },
   { name: 'Rob', salary: 2200 }, 
   { name: 'Adam', salary: 4950 }
]

这是我写的代码:

代码语言:javascript
复制
function raiseSalary(arr, raise) {
    if (arr.length === 0) {
        return [{}];
    } else {
        const raiseArray = arr.map((salaryObj) => {
            return (salaryObj.salaryObj / 100) * 10;
        });
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-06-03 15:05:20

你快到了。只是几点

就像当数组有零元素时返回某项一样,当数组中有元素时,您必须返回一些内容;在这种情况下,修改后的数组100+raise

  • You

  • 通过使用对象键和提供数据来保留对象,否则,您将得到一个公正的数字数组。

  • ,因为您的目标是通过raise提高工资,而不是乘以raise,在本例中,乘以10并不需要硬代码D12,因为您要将它传递给函数;它允许您在不更改函数的情况下传递515或其他提升值。

代码语言:javascript
复制
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) );

或者.

只需返回修改后的数组,而不需要测试元素,也可以使用对象析构。

代码语言:javascript
复制
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) );

票数 0
EN

Stack Overflow用户

发布于 2022-06-03 14:06:27

map方法应该做您想做的事情。注意salaryObj的析构以避免对原始对象进行操作。

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2022-06-03 15:02:29

下文介绍的是实现预期目标的一种可能方法。

代码片段

代码语言:javascript
复制
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)
);

解释

注释添加到上面的片段中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72490688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档