Если я правильно понимаю, это то, что вы хотите:
const someArray = [
{
"id": 10001,
"list": [
"10002",
"10003"
]
},
{
"id": 10002,
"list": [
"aaa",
"bbb"
]
},
{
"id": 10003,
"list": [
"ccc",
"ddd"
]
}
];
const [head,...rest] = someArray;
const result = head.list.reduce((acc,currentId)=>acc.concat(rest.find(({id})=> id === parseInt(currentId)).list),[]);
Вот jsFiddle https://jsfiddle.net/sudakatux/9hju85mt/22/
Объяснение: возьмите голову и отделите от остальных, так как голова содержитидентификаторы. используя заголовок в качестве словаря, найдите каждый список для каждого идентификатора в заголовке и объедините
note идентификатор должен быть в последующем списке, иначе произойдет сбой с неопределенным значением. если вы хотите учесть эту ошибку, вы можете установить по умолчанию пустой объект со списком. например, эта часть:
rest.find(({id})=> id === parseInt(currentId)).list
будет выглядеть как
rest.find(({id})=> id === parseInt(currentId)) || {list:[]}).list
Что в основном означает, что если его неопределенное значение возвращает объект с пустым списком, то он объединит пустой список, что приведет кв том же списке. (например, умножение на 1 при умножении)
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ после редактирования.
Если ваш массив находится в другом порядке, вам нужно найти диктонар итогда логика будет такой же
const [newHead] = otherArray.filter(({list}) => list.every(elem=>!isNaN(elem)));
const result2 = newHead.list.reduce(
(acc,currentId) =>acc.concat(otherArray.find(({id})=> id === parseInt(currentId)).list),[]);
, если вы проверяете флаг, тогда ваш головной фильтр будет выглядеть так. блоки одинаковы, единственное, что меняется, это условие.
const [newHead] = otherArray.filter(({flag}) => flag));
(обратите внимание *, что вместо использования остальных я использовал полный массив (otherArray)., так как я нацелен на равенство. Я использую фильтр иИзвлечение первого элемента результата. Потому что я учитываю возможность того, что в будущем у вас может быть более одного «словарного элемента». Если это так в будущем, то вам просто нужно объединить списки из результата фильтрации