Как вернуть индекс элемента объекта, сопоставленного с проверочным массивом - PullRequest
0 голосов
/ 09 мая 2020

Я надеюсь, что заголовок правильно отражает проблему, которую я пытаюсь решить. что мне нужно сделать, так это найти в объекте соответствующий элемент из проверочного массива и вернуть индекс объекта этого совпадения. to whit:

const checkArray = ['18A38', '182B92', '85F33'];    //  these are the values to match
const dataOject = [
  0 => ['id'=>'853K83', 'isGO'=>false],             //  this is the object to search through
  1 => ['id'=>'85F33', 'isGO'=>true],
  2 => ['id'=>'97T223', 'isGO'=>true],
  3 => ['id'=>'18A38', 'isGO'=>false],
  4 => ['id'=>'182B92', 'isGO'=>true],
  ...
];

что мне нужно сделать, так это найти соответствующий индекс, чтобы затем я мог проверить, установлен ли флаг isGO. это то, что я пытался, когда я зашел в тупик:

results = checkArray.forEach(function(value, index){
  if (dataObject.findIndex(function(k=> k == value))) results.push(k);
    //  i know 'results.push(k)' is not right, but it's the essence of what i want.  :P
};

я ожидаю, что results будет массивом индексов, который я могу затем go вернуться и проверить dataObject для набора isGO флагов; results должен выглядеть так:

results = [3, 1, 4];

, но я в тупике, как правильно сделать findIndex. Я читал this и this и this , но, будучи образовательными, они не имеют дело с массивом и объектом. i do имеют подчеркивание в этом проекте, но, опять же, не нашел ничего, что я считаю полезным в этом сценарии.

как мне заставить это работать так, чтобы мне что мне нужно?

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вместо того, чтобы возвращать индексы, не проще ли вернуть сами объекты?

const matchedObjects = dataObject.filter(object => checkArray.includes(object.id));

Это вернет все объекты, имеющие id, найденные в вашем checkArray.

Имея эти объекты в matchedObjects, вы можете перебирать их и делать все, что хотите sh.

1 голос
/ 09 мая 2020

что-то вроде этого?

const checkArray = ['18A38', '182B92', '85F33'] 

const dataOject =
  [ { id:'853K83', isGo:false }
  , { id:'85F33',  isGo:true  }
  , { id:'97T223', isGo:true  }
  , { id:'18A38',  isGo:false }
  , { id:'182B92', isGo:true  }
  ];

const result = checkArray.map(val=>dataOject.findIndex(el=>el.id===val) )


console.log( JSON.stringify(result))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...