Список повторяющихся записей в массиве объектов в JavaScript / Node. js - PullRequest
1 голос
/ 05 августа 2020

У меня есть массив offers с объектами, которые выглядят так:

{ 
    sellItem: {
        id: _, 
        quantity: _
    }, 
    buyItem: {
        id: _, 
        quantity: _
    }, 
    volume: _
}

Я хотел бы найти дубликаты, то есть предложения с одинаковыми 'идентификаторами продажи' и 'идентификаторами покупки'. Я также хотел бы зарегистрировать индекс этих элементов в исходном массиве «предложений».

Я пробовал делать это в течение 2 дней, но не смог никуда добраться, потому что мне было слишком сложно написать то, что я ' Я хотел бы сделать в управляемом количестве строк. Другие вопросы по StackOverflow касались только одного объекта, а не вложенных объектов.

Пример того, как выглядит мой массив offers:

{sellItem: {id: Pizza, quantity: 2}, buyItem: {id: Dollar, quantity: 1}, volume: 1}
{sellItem: {id: Pizza, quantity: 3}, buyItem: {id: Dollar, quantity: 2}, volume: 1}
{sellItem: {id: Banana, quantity: 2}, buyItem: {id: Pound, quantity: 1}, volume: 1}
{sellItem: {id: Apple, quantity: 2}, buyItem: {id: Euro, quantity: 1}, volume: 1}
{sellItem: {id: Pizza, quantity: 5}, buyItem: {id: Dollar, quantity: 3}, volume: 1}

И ожидаемый результат здесь:

0: Selling 2x Pizza for 1x Dollar
1: Selling 3x Pizza for 2x Dollar
4: Selling 5x Pizza for 3x Dollar

Все остальные записи из массива «предложений» следует игнорировать, потому что они не являются повторяющимися предложениями.

1 Ответ

1 голос
/ 05 августа 2020

Вы можете использовать filter вместе с find для поиска другого элемента с таким же id.

const arr = [{sellItem: {id: 'Pizza', quantity: 2}, buyItem: {id: 'Dollar', quantity: 1}, volume: 1},
{sellItem: {id: 'Pizza', quantity: 3}, buyItem: {id: 'Dollar', quantity: 2}, volume: 1},
{sellItem: {id: 'Banana', quantity: 2}, buyItem: {id: 'Pound', quantity: 1}, volume: 1},
{sellItem: {id: 'Apple', quantity: 2}, buyItem: {id: 'Euro', quantity: 1}, volume: 1},
{sellItem: {id: 'Pizza', quantity: 5}, buyItem: {id: 'Dollar', quantity: 3}, volume: 1}];
const res = arr.filter(({sellItem: {id}},idx)=>
   arr.find(({sellItem:{id:id2}},idx2) => idx !== idx2 && id === id2));
console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...