javascript - 如何使用动态计算的值更新数组中对象的属性
问题描述
我有一组对象(此处简化的示例):
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多个参数。它需要同时使用所有参数!
解决方案
使用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.values
和reduce
滚动遍历数组 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)
推荐阅读
- javascript - 有人可以帮我创建一个像样的 PAC 文件吗?
- html - 如何使溢出显示在我的网站上(我知道溢出属性)..?
- materialize - 当内容向左浮动时,Materialize css collapsible 不适合其内容
- php - PHP DOM 删除空元素以及其他元素
- scrapy - 表格中的scrapy href
- python - 如何修改整数中的多个位?
- python - 从一长串字符串中获取 Pandas DataFrame
- python - 经典“ValueError:一系列的真值不明确”
- r - 在 R 中绘制连续/破碎和离散数据;x 轴上的时间和 y 轴上的 bin
- html - 孤立的 HTML 表单未提交