@AnImAsHkO

Как сделать правильный вывод во вложенных циклах?

var data = {
    content: [{
        api: 'menu',
        content: {
            elem: 'item'
        }
    }]
};

var apiData = {
    menu: ['Home', 'Content', 'About']
};

test = function (json, api) {
    if(Array.isArray(json)) {
        json.forEach(function (element) {
            if(typeof element.content === 'object') {
                var content = [];

                api[element.api].forEach(function (apiElement, n) {
                    content[n] = element.content;
                    content[n].content = apiElement;
                });

                console.log(content);
            }

            if (typeof element.content !== 'string') {
                test(element.content, api);
            } else {
                test(element, api);
            }
        });
    } else {
        if(typeof json !== 'string') {
            test(json.content, api);
        }
    }
};

test(data, apiData);


Текущий вывод:
[ { elem: 'item', content: 'About' },
  { elem: 'item', content: 'About' },
  { elem: 'item', content: 'About' } ]


Нужно вывести:
[ { elem: 'item', content: 'Home' },
  { elem: 'item', content: 'Content' },
  { elem: 'item', content: 'About' } ]
  • Вопрос задан
  • 2300 просмотров
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
content[n] = element.content
вот здесь вы по ссылке присваиваете значение. Из-за этого такой результат.

Нужно как-то так:
api[element.api].forEach(function (apiElement, n) {
    content[n] = {};
    for (var i in element.content) {
        content[n][i] = element.content[i];
    }
    content[n].content = apiElement;
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы