Преобразовать массив в объект с ключом - PullRequest
0 голосов
/ 05 октября 2018

У меня есть объект как

{
    ids: ['11', '12', '13', '14'],
    cat: 1
}

Я хочу преобразовать это в

[
    { id: '11', cat: 1 },
    { id: '12', cat: 1 },
    { id: '13', cat: 1 },
    { id: '14', cat: 1 }
]

Возможно ли сделать этот единственный синтаксис?Можем ли мы использовать для этого синтаксис распространения?

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Ну, это просто map сверх ids.

var obj = {
  ids: ['11', '12', '13', '14'],
  cat: 1
};
console.log(obj.ids.map((x) => {
  return {
    id: x,
    cat: obj.cat
  };
}));
0 голосов
/ 05 октября 2018
var test = {
  ids: ['11', '12', '13', '14'],
  cat: 1
}

// one line
test.ids.map(i => { return {id: i, cat: test.cat} } )
0 голосов
/ 05 октября 2018

Вы можете взять рекурсивную функцию, которая разделяет все пары ключ / значение, и построить новый декартовой продукт путем итерации значений, если массив с объектами снова вызывает getCartesian и создает новые объекты.

Ключидолжно иметь то же имя, что и позже в наборе результатов.

function getCartesian(object) {
    return Object.entries(object).reduce((r, [k, v]) => {
        var temp = [];
        r.forEach(s =>
            (Array.isArray(v) ? v : [v]).forEach(w =>
                (w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
                    temp.push(Object.assign({}, s, { [k]: x }))
                )
            )
        );
        return temp;
    }, [{}]);
}

var data = { id: ['11', '12', '13', '14'], cat: 1 };

console.log(getCartesian(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...