Как написать этот код легче?

Вроде легкая задача, но я только так смог написать
Наверняка она пишется в три строки, но я что-то и через фаинд и через фильтр пробовал, нихрена не вышло как надо
Задача: приходит массив с данными, данные не упорядочены
data = [
    {name :'roma'},
    {name :'ira'},
    {name :'lesha'},
    {name :'ivan'},
    {age :'11'},
    {age :'24'},
    {age :'44'},
    {age :'66'},
    {link :'link1'},
    {link :'link2'},
    {link :'link3'},
    {link :'link4'},
]

Хочу что бы в новом массиве у меня были данные в виде
0: {name: 'roma'}
1: {age: '11'}
2: {link: 'link1'}
3: {name: 'ira'}
4: {age: '24'}
5: {link: 'link2'}
6: {name: 'lesha'}
7: {age: '44'}
8: {link: 'link3'}
9: {name: 'ivan'}
10: {age: '66'}
11: {link: 'link4'}

let dataResult = []
 let name = []
 let age = []
 let link = []
for(let i = 0; i < data.length; i++) {
    if(data[i].age) {age.push(data[i])}
    if(data[i].name) {name.push(data[i])}
    if(data[i].link) {link.push(data[i])}
}
for(let i = 0; i < name.length; i++) {
    dataResult.push(name[i], age[i], link[i])
}

это работает, но как это можно сделать элегантно красиво круто
  • Вопрос задан
  • 209 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const newData = data.reduce((acc, n) => {
  const k = Object.keys(n)[0];
  (acc.result[acc.keys[k] = (acc.keys[k] ?? -1) + 1] ??= []).push(n);
  return acc;
}, { result: [], keys: {} }).result.flat();

или

const numKeys = new Set(data.flatMap(Object.keys)).size;
const numObjs = data.length / numKeys;
const newData = data.map((n, i, a) => a[(i % numKeys) * numObjs + (i / numKeys | 0)]);
Ответ написан
WblCHA
@WblCHA
const clusterSize = data.length / 3;
  const result = data.reduce((acc, val, i) => {
    const cluster = ~~(i / clusterSize);
    acc[(i % clusterSize) * 3 + cluster] = val;
    return acc;
  }, Array.from({ length: data.length }));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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