Мне нужен массив идентификаторов, а не другой массив идентификаторов.У меня нет проблем с прямым 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 будет отфильтровано, я что-то упускаю из массивов идентификаторов объектов, выходящих из Монго?