Как отфильтровать массив объектов, но изменить порядок - PullRequest
0 голосов
/ 06 декабря 2018

Допустим, у меня есть массив объектов [] и массив чисел.

let objects = [
{name: apple, id:1},
{name: banana, id:2},
{name: orange, id:5}
];

let numbers = [5, 1];

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

result should be [{name: orange, id:5} , {name: apple, id:1} ]

Могу ли я сделать это с прототипами объектов javascript?или я могу использовать сторонние инструменты, такие как lodash?

Я пробовал с кодом ниже, но он сохраняет порядок исходного списка:

result = object.filter(p => {
    return numbers.includes(parseInt(p.id));
});

Ответы [ 4 ]

0 голосов
/ 06 декабря 2018

Он сохраняет порядок, потому что вы перебираете объекты.Если вы хотите использовать порядок из чисел, то вам нужно перебирать числа.

Вы не сказали, должны ли идентификаторы в числах существовать в объектах, мое решение работает, даже если случайный идентификатор найдет путьцифры

let result = []
numbers.forEach(
        element => { if (objects.find(anObject => anObject.id == element))
                         result.push(objects.find(anObject => anObject.id == element)) })
0 голосов
/ 06 декабря 2018

Просто Array.map и Array.find.Вам не нужно Array.filter.

const items = [{name: 'apple', id:1}, {name: 'banana', id:2}, {name: 'orange', id:5}]

const numbers = [5, 1]

const result = numbers.map(n => items.find(i => i.id === n))

console.log(result)

Поскольку вы отображаете на numbers, порядок массива result идентичен numbers.

0 голосов
/ 06 декабря 2018
checkObject(obj, arr) {
 let x;
 for (x in arr) {
    if(arr[x].id == obj.id){
      return true;
     }
 }
 return false;
}

let items = [{name: 'apple', id:1}, {name: 'banana', id:2}, {name: 'orange', id:5}]
let numbers = [5, 1];
checkObject(items, numbers);

Вы можете попробовать эту функцию, чтобы проверить, совпадает ли ваш массив чисел в вашем массиве Object.

0 голосов
/ 06 декабря 2018

Вы можете отобразить нужные элементы, найдя объекты.

var objects = [{ name: 'apple', id: 1 }, { name: 'banana', id: 2 }, { name: 'orange', id: 5 }],
    numbers = [5, 1],
    result = numbers.map(id => objects.find(o => o.id === id));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...