как удалить дубликаты записей из массива объектов? - PullRequest
0 голосов
/ 14 января 2019

У меня есть этот объект в Javascript.

[{"col1": 1, "col2": 25},{"col1": 1, "col2": 25},{"col1": 3, "col2": 30}]

Как я могу удалить дубликаты записей, чтобы получить этот результат?

[{"col1": 1, "col2": 25},{"col1": 3, "col2": 30}]

Я попробовал следующую логику, но не работает:

[...new Set(myData)]

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Я недавно прочитал это в другом ответе, и мне понравилось, здесь используется необязательный аргумент filter(), который передается как this внутри функции фильтра.

const input = [
    {"col1": 1, "col2": 25},
    {"col1": 1, "col2": 25},
    {"col1": 3, "col2": 30}
];

let res = input.filter(function({col1, col2})
{
    return !this.has(`${col1}-${col2}`) && this.add(`${col1}-${col2}`)
}, new Set());

console.log(res);
0 голосов
/ 14 января 2019

Этот ответ показывает простую filter операцию с Set:

const data = [{"col1": 1, "col2": 25},{"col1": 1, "col2": 25},{"col1": 3, "col2": 30}];

const unique = data.filter(function({ col1, col2 }) { return !this.has(`${col1}-${col2}`) && this.add(`${col1}-${col2}`)}, new Set);

console.log(unique);
0 голосов
/ 14 января 2019

const a = [{"col1": 1, "col2": 25},{"col1": 1, "col2": 25},{"col1": 3, "col2": 30}];

console.log(
  a.reduce(
    (acc, val) => !acc.some(({col1, col2}) => val.col1 === col1 && val.col2 === col2) 
                  ? acc.concat(val) 
                  : acc, 
     []
  )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...