Фильтровать массив с несколькими массивами - PullRequest
0 голосов
/ 28 сентября 2018

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

var array =[
    {
        id : '123',
        nama : 'name one'
    },
    {
        id : '456',
        nama : 'name one'
    },
    {
        id : '789',
        nama : 'name one'
    },
    {
        id : '012',
        nama : 'name one'
    }
]

var valuearray = [123, 456]

array.filter(r => valuearray.includes(r.id)))

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

То, как вы это делаете, выглядит следующим образом array.filter(element => valuearray.includes(parseInt(element.id))) Это приведет к тому, что после ввода данных, которые вы привели в качестве примера, в следующем массиве: [{ id : '123', nama : 'name one' }, { id : '456', nama : 'name one' }]

Я вижу несколько ответов здесь, используя ~ оператор.Если вам интересно, почему это так, то это потому, что indexOf может быть 0.Если результат функции фильтрации равен 0, элемент будет отфильтрован, поскольку это ложное значение.~ предотвращает это.

Этот должен дать вам больше информации, если вы заинтересованы в ~.


Редактировать:

Как уже упоминалось @str, valuearray имеет числа, в то время как id элементов в array являются строками.Вот почему мы используем parseInt, чтобы оба условия сравнения (функция includes) были одного типа.

0 голосов
/ 28 сентября 2018

Проблема в том, что в массиве каждый идентификатор объекта является строкой, а в valuearray каждый является числом.

, поэтому нам нужно преобразовать число с parseInt метод и проверка.

var array =[
    {
        id : '123',
        nama : 'name one'
    },
    {
        id : '456',
        nama : 'name one'
    },
    {
        id : '789',
        nama : 'name one'
    },
    {
        id : '012',
        nama : 'name one'
    }
]

var valuearray = [123, 456]


var filteredArray = array.filter(o => valuearray.includes(parseInt(o.id)))


console.log(filteredArray)
0 голосов
/ 28 сентября 2018

Ваше значение id в array является строковым типом, а значения в valuearray являются числовым типом, поэтому вам необходимо использовать filter() в дополнение к parseInt() для id значений.

var array =[
    {
        id : '123',
        nama : 'name one'
    },
    {
        id : '456',
        nama : 'name one'
    },
    {
        id : '789',
        nama : 'name one'
    },
    {
        id : '012',
        nama : 'name one'
    }
]

var valuearray = [123, 456];
var res = array.filter(i => ~valuearray.indexOf(parseInt(i.id)));
console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...