Как сформировать объект в виде ассоциативного массива?

Здравствуйте. Есть такой объект.

$('.filter').serializeArray()
(6) […]
​
0: Object { name: "filter-name", value: "Исполнитель" }
​
1: Object { name: "operator-select", value: "contains" }
​
2: Object { name: "name-select", value: "1" }
​
3: Object { name: "filter-name", value: "Статус" }
​
4: Object { name: "operator-select", value: "contains" }
​
5: Object { name: "search", value: "sdadasds" }
​
length: 6


Из него хочу сформировать данные таким образом
0: {
                "filter-name": "Исполнитель"
                "name-select": "1"
                "operator-select": "contains"
             },
             1 : {
                "filter-name": "Создан"
                "name-select": "1"
                "operator-select": "contains"
             }
  • Вопрос задан
  • 84 просмотра
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если считать «маркером» начала данных нового объекта поле filter-name,
можно вставлять новый пустой объект по такому сигналу
и заполнять поля всегда в последний элемент массива:
arr.reduce((acc, cur) => {
  if (cur.name === 'filter-name') acc.push({});
  acc[acc.length - 1][cur.name] = cur.value;
  return acc;
}, []);


Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Да. В каждой форме по 3 элемента
const arr = $('.filter').serializeArray();
const result = [];
for(let i = 0; i < arr.length; i += 3) {
  result.push(arr.slice(i, i + 3).reduce((acc, {name, value}) => ({...acc, [name]: value}), {}));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы