Как можно перебрать многомерный массив в JavaScript и получить из него отдельный массив?

Привет. Можно переформулировать ваш вопрос таким образом:
Я использую JavaScript для получения данных из PHP скрипта и столкнулся с проблемой распаковки полученных данных. Вот мой код:

```javascript
$.ajax({
    url: "/test_json.php"
}).done(function(data) {
    users = JSON.parse(data);
    avatars = users['avatars'];
    avatars.forEach(function(ava) {
        console.log(ava);
    });
});
```
В PHP-скрипте test_json.php я формирую многомерный массив $arr = array('avatars' => $avatars, 'names' => $names);. Однако при выполнении кода в консоли я получаю ошибку "avatars.forEach is not a function". Что я делаю не так? 
Заранее спасибо за вашу помощь!
  • 21 января 2024 г. 14:29
Ответы на вопрос 2
Привет! Ошибка "avatars.forEach is not a function" обычно означает, что `avatars` не является массивом, хотя вы ожидаете, что это будет массив. Возможно, происходит ошибка при парсинге JSON, или структура данных, которую вы получаете, отличается от ожидаемой.

Давайте шаг за шагом посмотрим, как можно решить эту проблему:

1. Убедитесь, что данные, которые вы отправляете из PHP, действительно в формате JSON. Удостоверьтесь, что в PHP-скрипте вы устанавливаете заголовок `Content-Type: application/json` и используете `json_encode()` для отправки массива:

```php
<?php
// test_json.php

$avatars = // ваш массив аватар
$names = // ваш массив имен

$arr = array('avatars' => $avatars, 'names' => $names);

header('Content-Type: application/json');
echo json_encode($arr);
?>
```

2. В вашем JavaScript коде, проверьте, что полученные данные действительно являются объектом и содержат ключ `avatars`, который является массивом. Вы можете добавить `console.log` для просмотра структуры данных:

```javascript
$.ajax({
    url: "/test_json.php"
}).done(function(data) {
    // Выводим полученные данные для дебага
    console.log(data);

    // Парсим JSON
    try {
        users = JSON.parse(data);
        console.log(users); // Проверяем, что users - это объект
    } catch (e) {
        console.error("Parsing error:", e);
    }

    // Получаем avatars, если это массив, и обходим его
    if (Array.isArray(users.avatars)) {
        users.avatars.forEach(function(ava) {
            console.log(ava);
        });
    } else {
        console.error("avatars is not an array:", users.avatars);
    }
});
```

3. Если вы работаете с jQuery версии 1.4 и выше, то jQuery автоматически парсит JSON-ответ, если сервер отправил правильный `Content-Type`. В этом случае, вы можете не использовать `JSON.parse`:

```javascript
$.ajax({
    url: "/test_json.php",
    dataType: "json" // Указываем, что ожидаем JSON
}).done(function(users) {
    // в users сразу будет распаршенный объект
    console.log(users);

    if (Array.isArray(users.avatars)) {
        users.avatars.forEach(function(ava) {
            console.log(ava);
        });
    } else {
        console.error("avatars is not an array:", users.avatars);
    }
});
```

Следуйте этим шагам, и вы сможете разобраться с ошибкой и правильно обработать полученный массив.
console log(users); 
И потом уже разбираться почему там не то что ожидается
Похожие вопросы