#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)
метод, описанный здесь, и, похоже, он сработал, нужно будет провести дополнительные исследования. Спасибо за вклад, Том!