Задать вопрос
@Timon1221

Как правильно достать данные из многомерного массива?

Не сильно соображаю в JS. Есть многомерный массив data, полученный через ajax запрос, примерно такой.
{
"set": {
        "items": [
            {
                "path": "path",
                "type": "file",
                "name": "office.doc",
                "size": 278982
            },
            {
                "name": "1.JPG",
                "path": "path",
                "type": "file",
                "size": 896772
            }
        ],
        "total": 2
},
"type": "dir"
}

Через цикл пытаюсь достать, например name
for(var i = 0; i < total; i++) {
    var name = data['set']['items'][i]['name'];

}

Если в цикле прописать console.log(name);, то в консоли он выдаст все как нужно, по очереди, но я пытаюсь это вставлять в таблицу, через такое
$('tbody#parent>tr:gt(0)>td:nth-child(3)').text(name);

А в таблицу, во все строки, вставляется только последнее значение массива
1.JPG
1.JPG
1.JPG
Не знаю как еще более понятно объяснить
  • Вопрос задан
  • 341 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вам надо перебирать все строки таблицы и для каждой вставлять соответствующее значение. Сейчас вы каждое значение вставляете во все строки таблицы разом.
$('tbody#parent>tr:gt(0)>td:nth-child(3)').each(function(index) {
  $(this).text(data['set']['items'][index]['name']);
});
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Если в цикле прописать console.log(name);, то в консоли он выдаст все как нужно

И какого же хрена вы спрашиваете как правильно достать данные, если с этим проблем нет?

в таблицу, во все строки, вставляется только последнее значение

Так может, в селекторе стоит указывать конкретный номер строки, куда вы хотите подставить текущее значение, а не все сразу? Например:

$(`#parent > :eq(${i + 1}) > :nth-child(3)`).text(name);

Ну а вообще, лучше бы отказаться от написания цикла своими руками:

$('#parent > :gt(0) > :nth-child(3)').text(i => {
  return (data.set.items[i] || {}).name;
});

// или, к чёрту jquery

data.set.items.forEach(function(n, i) {
  const tr = this[i + 1];
  tr && (tr.cells[2].textContent = n.name);
}.bind(document.querySelector('#parent').rows));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kudis
Bitrix developer
Так случилось, что в JS нет многомерных массивов - это объект
бегать по нему удобнее через ключи
var keys = Object.keys(arCartElements);
keys.forEach(function(elementId) {
    var element = arCartElements[elementId];
    console.log(element);
});

для бесконечной вложности использую рекурсивный обход
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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