首页 > 解决方案 > 如何使用动态计算的值更新数组中对象的属性

问题描述

我有一组对象(此处简化的示例):

array1 = [
  {name: "alfa", par1: 1, value: null},
  {name: "beta", par1: 2, value: null},
  {name: "gamma",par1: 3, value: null},
]

带有一些参数的对象:

parameters = {par2: 1, par3: 9}

并且函数使用来自 array1 的对象的一些属性和来自参数对象的一些参数计算值(par1 来自数组对象本身,par2、par3 存储在另一个对象中 - 所有 array1 通用):

func = (par1, par2, par3) => {
  return par1 + par2 + par3
}

用函数func的结果更新array1中对象中的“值”属性的最简单方法是什么?这是预期的结果:

result = [
  {name: "alfa", par1: 1, value: 11},
  {name: "beta", par1: 2, value: 12},
  {name: "gamma",par1: 3, value: 13},
]

必须有一种优雅的方式来实现这一点......感谢所有帮助:)

编辑:

抱歉没有说清楚......问题的关键是使用func函数。上面的例子非常简化,实际上函数的公式很复杂(使用reduce作为参数对象是不可能的)并且使用了20多个参数。它需要同时使用所有参数!

标签: javascriptfunction

解决方案


使用func

let array1 = [
  {name: "alfa", par1: 1, value: null},
  {name: "beta", par1: 2, value: null},
  {name: "gamma",par1: 3, value: null},
]

let func = (par1, par2, par3) => par1 + par2 + par3

let parameters = {par2: 1, par3: 9}

array1.forEach(e => e.value = func(e.par1, ...Object.values(parameters)))

console.log(array1)

一种替代方法使用forEach,Object.valuesreduce

滚动遍历数组 arra1 中的所有对象{name: '...', p1: ..., values: null}'并使用reduce对对象的所有值求和parameter,然后将结果与p1对象的值相加arra1

let array1 = [
  {name: "alfa", par1: 1, value: null},
  {name: "beta", par1: 2, value: null},
  {name: "gamma",par1: 3, value: null},
]

let parameters = {par2: 1, par3: 9}


array1.forEach(e => e.value = Object.values(parameters).reduce((ac, curr) => ac + curr, e.par1))
  
  
console.log(array1)


推荐阅读