问题描述
array1 = [
{name: "alfa",par1: 1,value: null},{name: "beta",par1: 2,{name: "gamma",par1: 3,]
具有某些参数的对象:
parameters = {par2: 1,par3: 9}
然后使用array1对象的某些属性和parameters对象的某些参数计算值的函数(par1来自数组对象本身,par2,par3存储在另一个对象中-所有array1都通用):
func = (par1,par2,par3) => {
return par1 + par2 + par3
}
用函数func的结果更新array1对象中“ value”属性的最简单方法是什么? 这是预期的结果:
result = [
{name: "alfa",value: 11},value: 12},value: 13},]
必须有一种优雅的方法来实现这一目标... 感谢所有帮助:)
编辑:
很抱歉,您的解释不够充分... 问题的关键是使用 func 功能。上面的示例非常简化,实际上该函数具有复杂的公式(无法对 parameters 对象使用 reduce )和使用20多个参数。 它需要同时使用所有参数!
解决方法
使用func
let array1 = [
{name: "alfa",par1: 1,value: null},{name: "beta",par1: 2,{name: "gamma",par1: 3,]
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
的{{1}}对象
arra1
,
您可以将func
修改为咖喱函数。这样,您可以先将parameters
传递给它,然后使用cypress docs从中提取par2
和par3
属性/值。该函数将返回一个新函数(add),该函数接受具有par1
属性的另一个对象,并关闭par2
和par3
值。然后,您可以在.map()
上使用array1
返回一个新数组,其中每个对象都包含一个value
属性。 value
键的值将是将o
传递到func
返回的函数中的结果-该函数会将par1,par2和par3加在一起。
请参见以下示例:
const array1 = [
{name: "alfa",];
const parameters = {par2: 1,par3: 9}
const func = ({par2,par3}) => ({par1}) => {
return par1 + par2 + par3;
};
const add = func(parameters);
const res = array1.map(o => ({...o,value: add(o)}));
console.log(res);
可以通过获取parameters
对象的值并使用.reduce()
对其求和来实现对象的可伸缩版本:
const array1 = [
{name: "alfa",par3: 9}
const func = params => {
const sum = Object.values(params).reduce((t,n) => t+n,0);
return ({par1}) => par1 + sum;
};
const add = func(parameters);
const res = array1.map(o => ({...o,value: add(o)}));
console.log(res);
,
您可以尝试一下,它是一个或两个参数就足以使您的函数返回value属性的新值。
您甚至可以摆脱基本参数,而将其包含在函数中。
const array1 = [{
name: "alfa",value: null
},{
name: "beta",{
name: "gamma",]
const func = (base,par1) => {
return base + par1;
}
const result = array1.map(x => ({
...x,value: func('1',x.par1)
}))
console.log(result)
,
array1 = [
{name: "alfa",];
parameters = {par2: 1,par3: 9};
array1.forEach(item=>item.value=item.par1+parameters.par2+parameters.par3);
console.log(array1);
对于未知数量的参数(不考虑其名称):
array1 = [
{name: "alfa",par3: 9,x: 3,y:7};
array1.forEach(item=>
item.value=item.par1+
Object.values(parameters).reduce((acc,cv)=>acc+cv,0)
)
console.log(array1);