Здесь у вас есть одно решение, которое использует в основном Array.reduce () для перебора внешних объектов массива, получения сплющенного массива значений из каждого внешнего объекта для создания массива с внутренними объектами.а затем отфильтруйте те, которые удовлетворяют условию, сохраняя их в новом массиве:
var obj = [
{
"ston": [
{"id": "identity1", "in": "string", "out": "number", "value": 10},
{"id": "identity2", "in": "string", "out": "number", "value": 10}
],
"nton": [
{"id": "identity1", "in": "number", "out": "number", "value": 20},
{"id": "identity2", "in": "number", "out": "number", "value": 30}
]
}
];
let res = obj.reduce((acc, o) =>
{
acc = acc.concat(Object.values(o).flat().filter(
o => o.in === "string" && o.out === "number"
));
return acc;
}, []);
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Другая документация используемых методов:
Или, подумав немного, вы можете использовать следующую упрощенную версию с Array.map ()
var obj = [
{
"ston": [
{"id": "identity1", "in": "string", "out": "number", "value": 10},
{"id": "identity2", "in": "string", "out": "number", "value": 10}
],
"nton": [
{"id": "identity1", "in": "number", "out": "number", "value": 20},
{"id": "identity2", "in": "number", "out": "number", "value": 30}
]
}
];
let res = obj.map(Object.values).flat(2).filter(
o => o.in === "string" && o.out === "number"
);
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}