Влить массив массива объектов в просто массив объектов

#javascript #arrays #javascript-objects

#javascript #массивы #javascript-объекты

Вопрос:

Итак, у меня есть следующая функция внутри моего js-файла:

 function get_array_of_post_objects(slug)
{
    let items = [];
    wp.api.loadPromise.done(function () {
        const Posts = wp.api.collections.Posts.extend({
            url: wpApiSettings.root   'menus/v1/locations/'   slug,
        });
        const all_posts = new Posts();
        all_posts.fetch().then((posts) => {
            console.log(posts.items);
            items.push(posts.items);
        });
    });
    console.log(items);
    return items;
}
 

Внутри all_posts.fetch вызова у меня есть a console.log(posts.items) , который выводит следующий массив объектов, который является идеальным:
введите описание изображения здесь


Проблема:
в моем возврате у меня есть return items то, что я хочу вернуть элементы, но он возвращает их в виде массива массива объектов, что не то, что я хочу, как показано ниже: введите описание изображения здесь

Может кто-нибудь сказать мне, что я делаю не так? В конечном итоге я хочу, чтобы мой return просто возвращал массив объектов, а не массив массива объектов — любая помощь приветствуется.

Комментарии:

1. вместо items.push(posts.items) того, чтобы пытаться items = posts.items . Я думаю posts.items , что это массив объектов, и вы вводите items (который является массивом) массив объектов.

2. Спасибо за отзыв @AHMEDSAJJAD, я попробовал это, но потом мой return items возвращает пустой массив, поэтому мне было интересно, что бы это могло быть.

3. используйте оператор распространения, items.push(...posts.items) . Это приведет к помещению в items массив каждого элемента в posts.items массиве.

4. Привет, @AHMEDSAJJAD, items.push(...posts.items) сработало отлично! Пожалуйста, опубликуйте это как окончательный ответ — мне нужно будет провести дополнительные исследования.

Ответ №1:

Проблема заключалась в том, что вы помещали в items массив массив объектов posts.items . С помощью spread оператора ... вы можете вставить каждый элемент posts.items массива items .

 ...
all_posts.fetch().then((posts) => {
    console.log(posts.items);
    items.push(...posts.items);
});
...
 

Вы можете прочитать больше об spread операторе здесь:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

Ответ №2:

В вашем коде вы помещаете posts.items (который уже является массивом объектов) в items (который инициализируется как пустой массив).

Вам нужно иметь массив, содержащий posts.items? Вместо этого вы могли бы просто просто сказать items = posts.items , поскольку posts.items уже является массивом объектов, что, по вашим словам, вам требуется.

 function get_array_of_post_objects(slug)
{
    let items;
    wp.api.loadPromise.done(function () {
        const Posts = wp.api.collections.Posts.extend({
            url: wpApiSettings.root   'menus/v1/locations/'   slug,
        });
        const all_posts = new Posts();
        all_posts.fetch().then((posts) => {
            console.log(posts.items);
            items = posts.items;
        });
    });
    console.log(items);
    return items;
}
 

Комментарии:

1. Спасибо за отзыв @Tom, я попробовал этот метод, но теперь мой return items не улавливает let items; , и он возвращается как неопределенный.

2. Я использовал items.push(...posts.items) метод, описанный здесь, и, похоже, он сработал, нужно будет провести дополнительные исследования. Спасибо за вклад, Том!