2015-07-08 8 views
2

Установка: leftItems & rightItems - это массивы 5-значных идентификаторов. matchedItems - это массив всех этих идентификаторов - есть много результатов с тем же идентификатором. $matches - это div, к которому я хочу добавлять результаты ТОЛЬКО Если результат с этим идентификатором не был добавлен в список.Неисправность фильтрации уникальных идентификаторов

ПРОБЛЕМА: Я продолжаю получать div с тем же ID в $matches! Тем не менее, я знаю, что мой фильтр делает ЧТО-ТО, потому что, если я добавлю .toString к проверке существования, вот так: matchedItems.indexOf(litem.toString()), я получаю больше результатов. Мой чек получает его до 2 или 3 результатов с тем же ID, но не только 1, как я хочу.

leftItems.forEach(function (litem) { 
    rightItems.forEach(function (ritem) { 
     if (litem === ritem) { 
      var itemDiv = $('.results.left a[provider-id="' + litem + '"]'); 
      var miniMe = itemDiv.clone(); 

      if (matchedItems.indexOf(litem) === -1){ 
       $matches.append(miniMe); 
       matchedItems.push(litem); 
      } else { 
       console.log('element exists with id: ' + litem); 
      } 

     } 
    }); 
}); 
+0

Итак, в чем ваш вопрос? –

ответ

0

, если вы пытаетесь найти значения, которые совпадают по двум или более массивов, уже есть библиотеки там, чтобы сделать это для вас. Например: https://lodash.com/docs#intersection

_.intersection ([1, 2], [4, 2], [2, 1]); // → [2]

Из этого результата вы можете перерисовать все, что вам нужно в интерфейсе.

Чтобы быть честным, я ваш пример немного сбивает с толку, и, хотя я могу думать о многих решений вашей проблемы им не уверен, я понимаю вашу USECASE

Edit: На основе свой комментарий, вы должны следовать советам Michaels и сначала используйте concat на обеих массивах, затем на стороннюю уникальную функцию(), и в моем случае мы оба используем lodash, его отличный)

+0

Чтобы уточнить, у меня есть 2 массива идентификационных номеров, например [10, 20, 30, 40] и [10, 25, 30, 45]. Я хочу добавить только UNIQUE, поэтому я хочу что-то вроде [10, 20, 25, 30, 40, 45]. Однако я не могу отфильтровать все дубликаты, и я получаю что-то вроде [10, 10, 20, 25, 30, 30, 40, 45] – ttante

+1

'_.uniq ([] .concat (leftItems) .concat (rightItems)) .sort() 'создает новый массив, объединяет в него два входных массива, создает новый массив только с уникальными элементами, а затем сортирует результат. Дополнительную информацию см. На странице https://lodash.com/docs#uniq. –

+0

BTW @ttante, когда вы добавляете разъяснение, подобное приведенному выше, рекомендуется обновить вопрос с помощью новой информации. Таким образом, вопрос завершен и может стоять сам по себе, если люди не должны ссылаться на комментарии, чтобы получить полную картину. –

Смежные вопросы