¿Cómo cambio todos los valores de salario y los aumento en un porcentaje, cuando cada salario es una propiedad de un objeto, y cada objeto se almacena en una matriz? Por ejemplo, aumentando en un 10 por ciento y tengo que redondear el resultado al entero más cercano:
raiseSalary([ { name: "Ali", salary: 3000 }, { name: "Rob", salary: 2000 }, { name: "Adam", salary: 4500 }, ], 10)La llamada anterior debería devolver:
[ { name: 'Ali', salary: 3300 }, { name: 'Rob', salary: 2200 }, { name: 'Adam', salary: 4950 } ]Este es el código que he escrito:
function raiseSalary(arr, raise) { if (arr.length === 0) { return [{}]; } else { const raiseArray = arr.map((salaryObj) => { return (salaryObj.salaryObj / 100) * 10; }); } }El método del mapa debe hacer lo que quieras. Tenga en cuenta la desestructuración de salarioObj para evitar manipular el objeto original.
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);A continuación se presenta una posible forma de lograr el objetivo deseado.
Fragmento de código
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) );Explicación
Comentarios agregados al fragmento anterior.
Ya casi estás ahí. solo algunos puntos
raise , en lugar de multiplicar por el raise , en este caso 10 , multiplique por 100+raiseraise ya que lo está pasando a la función; le permite pasar 5 , o 15 o algún otro valor elevado sin cambiar su función. 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) );Alternativamente...
Simplemente devuelva la matriz modificada sin probar los elementos, y también puede usar la desestructuración de objetos.
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) );