Как вернуть уникальные элементы во вложенном массиве - PullRequest
1 голос
/ 18 января 2020

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

В некоторых массивах значений есть дубликаты значений, которые я хотел бы удалить.

Пример

let attributes = [{
  "attribute": "Size",
  "values": ["S", " S", "M", "L", "L"]
},{
  "attribute": "Shape",
  "values": ["Square", "Round", "Square", " Square", " Square"]
}]

let filtered_attributes = attributes.forEach(el => {
  el.map(a => a.values.trim())
  .filter((item, pos, self) => { return self.indexOf(item) === pos })
  .sort();
})

Требуемый вывод

[{
  "attribute": "Size",
  "values": ["L", "M", "S"]
},{
  "attribute": "Shape",
  "values": ["Round", "Square"]
}]

Как можно вернуть список уникальных значений (значений, в которых пробел был сначала обрезан) для каждого объекта в массив?

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Вместо фильтра вы можете использовать оператор «Устанавливать и распространять»:

let attributes = [{
 "attribute": "Size",
  "values": ["S", " S", "M", "L", "L"]
},{
  "attribute": "Shape",
  "values": ["Square", "Round", "Square", " Square", " Square"]
}]

attributes.forEach(el => {
  el.values = [...new Set(el.values.map(a => a.trim()))].sort();
})
console.log(attributes);
0 голосов
/ 18 января 2020

Вы можете использовать map плюс деструктуризацию, чтобы добраться до реквизита, затем вы можете filter ваши значения поддержать оттуда, trim ming каждое значение внутри filter.

let attributes = [{
  "attribute": "Size",
  "values": ["S", " S", "M", "L", "L"]
},{
  "attribute": "Shape",
  "values": ["Square", "Round", "Square", " Square", " Square"]
}]

// usage example:
let unique = attributes.map(({ attribute, values }) => ({
  attribute, values: values.filter((v, i, s) => s.indexOf(v.trim()) === i) // v, i, s = value, index, self
}));
console.log(unique)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...