Значение объекта дубликатов массивов создается как многомерный массив - PullRequest
0 голосов
/ 19 февраля 2020

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

Например, из формы с serializeArray это пропуск

0: {name: "holiday", value: "newyear"}
1: {name: "holiday", value: "christmas"}
2: {name: "startDate", value: ""}
3: {name: "genre", value: ""}
4: {name: "city", value: ""}

Но я хотел создать

0: {name: "holiday", value: {"christmas", "newyear"}}
1: {name: "startDate", value: ""}
2: {name: "genre", value: ""}
3: {name: "city", value: ""}

И затем передать его filter() моим собственные правила и ключи

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

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Группируйте по имени, а затем извлекайте сгруппированные значения.

let arr =[{name: "holiday", value: "newyear"},{name: "holiday", value: "christmas"},{name: "startDate", value: ""},{name: "genre", value: ""},{name: "city", value: ""}],
    result = Object.values(arr.reduce((a, {name, value: v}) => {
      (a[name] || (a[name] = {name, value: []})).value.push(v);
      return a;
    }, {}));

console.log(result);
1 голос
/ 19 февраля 2020

Вы можете использовать reduce для группировки значений в объекте, а затем получить массив с Object.values.

const data = [{name: "holiday", value: "newyear"}, {name: "holiday", value: "christmas"}, {name: "startDate", value: ""}, {name: "genre", value: ""}, {name: "city", value: ""}]

const obj = data.reduce((r, e) => {
  if(!r[e.name]) r[e.name] = {...e}
  else r[e.name].value = [].concat(r[e.name].value, e.value)
  return r
}, {})

const result = Object.values(obj)
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...