微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用动态计算值更新数组中对象的属性

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

我有一个对象数组(此处简化了示例):

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)

使用forEachObject.valuesreduce

的另一种选择

滚动浏览数组arra1 {name: '...',p1: ...,values: null}'中的所有对象,并使用reduceparameter对象的所有值求和,然后将结果与p1的{​​{1}}对象

arra1

,

您可以将func修改为咖喱函数。这样,您可以先将parameters传递给它,然后使用cypress docs从中提取par2par3属性/值。该函数将返回一个新函数(add),该函数接受具有par1属性的另一个对象,并关闭par2par3值。然后,您可以在.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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。