фильтр массива не работает с массивами MongoDB objectId - PullRequest
0 голосов
/ 07 апреля 2019

Мне нужен массив идентификаторов, а не другой массив идентификаторов.У меня нет проблем с прямым javascript - но когда я пытаюсь использовать массивы, возвращенные из MongoDB - фильтры не работают.

Примеры:

Сначала давайте посмотрим на два массива ...

x.user_ids is ["5b579074dc1eac0014276442","5b574e03dc1eac0014276418"] 
x.user_bad_ids is ["5b574e03dc1eac0014276419","5b579074dc1eac0014276442"]

Я бы хотел, чтобы конечный массив был (в этом примере есть только один «хороший» идентификатор)

["5b574e03dc1eac0014276418"] 

Я пробовал ПРОСТОЙ фильтр

console.log( x.user_ids.filter(e => !x.user_bad_ids.includes(e)) );

но я получаю

[ 5b579074dc1eac0014276442, 5b574e03dc1eac0014276418 ]

Я отмечаю, что теперь есть кавычки ... Я не уверен, что js не любит массивы objectid из Монго

Я попробовал что-то более "старое школьное"

var tempArr = x.user_ids.filter(function(item) {
    return !x.user_bad_ids.includes(item);
});
console.log( tempArr );

но я получаю

[ 5b579074dc1eac0014276442, 5b574e03dc1eac0014276418 ]

И наконец - некоторую многословную функцию

    Array.prototype.uniqueFrom = function() {
      if (!arguments.length)
        return [];
      var a1 = this.slice(0); // Start with a copy

      for (var n=0; n < arguments.length; n++) {
        var a2 = arguments[n];
        if (!(a2 instanceof Array))
          throw new TypeError( 'argument ['+n+'] must be Array' );

        for(var i=0; i<a2.length; i++) {
          var index = a1.indexOf(a2[i]);
          if (index > -1) {
            a1.splice(index, 1);
          }
        }
      }
      return a1;
    }

    console.log( x.user_ids.uniqueFrom(x.user_bad_ids) );

Я получаю

[ 5b579074dc1eac0014276442, 5b574e03dc1eac0014276418 ]

Во всех случаяхЯ ожидаю ... 76442 будет отфильтровано, я что-то упускаю из массивов идентификаторов объектов, выходящих из Монго?

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