JavaScript - вынуть объект из массива и разместить его содержимое на одной высоте - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно решить следующую проблему самым простым и кратчайшим способом.

Как вынуть ключи из объекта узла внутри массива и разместить их на той же высоте, что и основной массив:

Что у меня есть:

[{ name: 'name 1', id: 1, node: [{ name: 'name2', id: 2 }]}]

Что я хочу:

[{name: 'name 1', id: 1}, {name: 'name 2', id: 2}]

Заранее благодарю за помощь.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Вы можете попробовать это с помощью Reduce.Вы рекурсивно пересекаете узлы и объединяете массив только с именем и идентификатором.Надеюсь, это поможет.

const data = [{ name: 'name 1', id: 1, node: [{ name: 'name2', id: 2 }]}];

const flatten = (array = []) =>
    array.reduce((acc, { name, id, node }) =>
        acc.concat(flatten(node)).concat({ name, id })
    , []);

console.log(flatten(data));
0 голосов
/ 18 декабря 2018

Вот кусок кода, который делает то, что вы ищете.Есть пара операторов console.log, которые проведут вас через обрабатываемые данные.Я уверен, что вам нужно настроить его, но это только начало.

В этом решении есть 3 цикла forEach, поэтому, если вы работаете с большим массивом / объектом и / или запускаете этотчасто - могут быть более эффективные методы для достижения этой цели.

Предполагая ECMA6:

const arr = [{ name: 'name 1', id: 1, node: [{ name: 'name2', id: 2 }]}];
arr.forEach((item) =>{
    console.log("array item:", item);
    const keys = Object.keys(item);
    console.log("item keys", keys);
    keys.forEach((key) =>{
        if(item[key] instanceof Object){
            if(Array.isArray(item[key])){
                item[key].forEach((internalObject) =>{
                    console.log("intenal object", internalObject);
                    arr.push(internalObject);
                    delete item[key];
                    console.log("New array", arr);
                })
            }
        }
    })
});
0 голосов
/ 18 декабря 2018

Хорошо, при условии, что ваша структура всегда выглядит так:

Массив объектов, содержащих всегда 1 объект, и у этого объекта всегда есть элемент node (это другой массив объектов), вам нужно это сделатькак это (псевдокод):

mainArray = [{ name: 'name 1', id: 1, node: [{ name: 'name2', id: 2 }]}];
console.log(mainArray);

node = mainArray[0].node[0];
delete mainArray[0].node;
mainArray.push (node);

console.log(mainArray);

Поскольку вы больше не указываете свою структуру данных, я не могу сделать что-то более конкретное, но вы, вероятно, можете приспособиться к этому

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...