Получить `val` свойства из массива объектов внутри массива объектов на основе другого свойства объекта - PullRequest
0 голосов
/ 29 марта 2020
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}]}]

как написать функцию, используя функции массива, чтобы получить значение val, которое равно 3 сверху массива объектов из массива объектов, где type равно med

ожидаемый результат

var result = 3;

Я пытался использовать функцию уменьшения массива

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 голосов
/ 29 марта 2020

Вы можете использовать каждую функцию массивов и возвращать false, когда вы получили первое значение

var value,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}]}]
arr.every(outerObject => {let desObj = outerObject.req.find(obj => obj.type == "med");if (desObj){value=desObj.val;return false;}return true;   
});
console.log(value);
0 голосов
/ 29 марта 2020

Вы можете объединить массив в один массив объектов, а затем найти объект с 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...