根据对象的其他属性从对象数组中的对象数组获取val属性

时间:2020-03-29 16:51:32

标签: javascript arrays object ecmascript-6

var arr = [{req: [{type: 'high', val: 1},{type: 'low', val: 2}], other: [{random: 123}]}, {req: [{type: 'cool', val: 1},{type: 'med', val: 3}], other: [{random: 456}]}]

如何使用数组函数编写函数以从valtype的对象数组内部的对象数组的上方获取med的值

预期结果

var result = 3;

我尝试使用array的reduce函数

let getRequirementArray = (req, vol) =>
  req.reduce((currentVal, obj) => {
    return obj.type === vol ? obj.val + currentVal : currentVal;
  }, 0);

let getFinalOutput = (arr, vol) =>
  arr.reduce((currentVal, obj) => {
    let { req } = obj;
    let val= getRequirementArray(req, vol);
    return val + currentVal;
  }, 0);
var result = getFinalOutput(arr, 'med');

但是我期望功能会更小

2 个答案:

答案 0 :(得分:0)

您可以将数组聚合为单个对象数组,然后找到type等于med的对象

var arr = [{req: [{type: 'high', val: 1},{type: 'low', val: 2}], other: [{random: 123}]}, {req: [{type: 'cool', val: 1},{type: 'med', val: 3}], other: [{random: 456}]}]

var mix = [].concat(...arr.map(t => t.req));
var obj = mix.find(x => x.type === 'med');
console.log(obj.val);

答案 1 :(得分:0)

您可以使用Arrays的每个函数,并在获得第一个值时返回false

data.append('description', 'my long description...');