Javascript 从Vue.JS中的子对象收集值并指定给父对象键

Javascript 从Vue.JS中的子对象收集值并指定给父对象键,javascript,object,vue.js,vuejs2,Javascript,Object,Vue.js,Vuejs2,以下是数据“valueContainer”的外观: { "totalValue": 0, "subValues1": [ { "value": 20 },{ "value": 30 } ], "subValues2": [ { "value": 10 },{ "value": 40 } ] } 我正在尝试从“subValues1”和“subVal

以下是数据“valueContainer”的外观:

{
         "totalValue": 0,
         "subValues1": [
           { "value": 20 },{ "value": 30 }
         ],
         "subValues2": [
           { "value": 10 },{ "value": 40 }
         ]
        }
我正在尝试从“subValues1”和“subValues2”中收集值,并将它们存储在“totalValue”字段中?我一直在尝试使用computed,但for循环不起作用,下面是一个尝试从第一个子对象累积值的示例

  computed: {
    totalValue: function() {
      let total;
      for (let v in this.valueContainer.subValues1) {
        total = total + v.value;
      }
      return total;
    }
  }
如前所述,我得到的总价值为NaN。我如何循环遍历这些值、累加这些值并将它们存储为totalValue


链接到codepen:

您可以获取密钥,按不需要的值进行过滤,并迭代值数组。然后将这些值添加到总数中

var data={valueContainer:{totalValue:0,subValues1:[{value:20},{value:30}],subValues2:[{value:10},{value:40}]};
对象
.key(data.valueContainer)
.filter(v=>v!=='totalValue')
.forEach(k=>data.valueContainer[k].forEach(({value})=>data.valueContainer.totalValue+=value));

控制台日志(数据)这是一个工作组件:


{{totalValue}}
const sum=list=>list.reduce((acc,value)=>acc+value,0);
导出默认值{
数据(){
返回{
valueContainer:{
子值1:[{value:20},{value:30}],
子值2:[{value:10},{value:40}],
},
};
},
计算:{
totalValue(){
const{subValues1,subValues2}=this.valueContainer;
常量值=[…子值1,…子值2].map({value})=>value);
返回和(值);
},
},
};
如果您正在使用,您可以使用
sumBy

从“lodash/sumBy”导入sumBy;
导出默认值{
数据(){
返回{
valueContainer:{
子值1:[{value:20},{value:30}],
子值2:[{value:10},{value:40}],
},
};
},
计算:{
totalValue(){
const{subValues1,subValues2}=this.valueContainer;
返回sumBy([…子值1,…子值2],“值”);
},
},
};

子值1
子值2
应该是数组。感谢您捕捉到这一点。它实际上是一个数组,现在编辑您的数据是无效的javascript顺便说一句。您可以创建一个代码笔吗?这里是:是的,您可以访问值,如so
this.valueContainer.subValues1[v]
,或者使用其他迭代,如for…of loop,array.forEach