#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
У меня есть объект с вложенными объектами. Как мне настроить таргетинг на определенный индекс объекта и перебирать все вложенные значения image
. Как вы заметите, длина вложенных объектов различается.
Целевой пример: productArray[0].image
= test1.png, test2.png, test3.png
var products = [
//item1
{
identifier: "item-0",
image: {
"img1": "test1.png",
"img2": "test2.png",
"img3": "test3.png"
}
},
//item2
{
identifier: "item-1",
image: {
"img1": "test1.png",
"img2": "test2.png"
}
},
//item3
{
identifier: "item-2",
image: {
"img1": "test1.png",
"img2": "test2.png",
"img3": "test3.png",
"img4": "test4.png",
"img5": "test5.png",
"img6": "test6.png",
"img7": "test7.png"
}
}
];
Комментарии:
1. Вы должны принять ответ, который решает вашу проблему, чтобы выразить признательность другим пользователям, которые пытались вам помочь. Вот как работает stackoverflow.
Ответ №1:
Мы можем сделать это. Что вам нужно сделать, это простой цикл по объекту с определенным индексом, или вы можете настроить таргетинг на них все. Обратите внимание, что image
объект не является массивом, поэтому он не будет иметь точного length
свойства.
Нацеливание на все индексы:
for(var i = 0; i < products.length; i ) {
console.log("Item: " i);
var images = products[i].image;
for(var a in images)
console.log(images[a]);
}
Конкретная цель:
for(var i in products[0].image)
console.log(products[0].image[i]);
Здесь я использовал цикл for , но вы можете использовать цикл while, если хотите.
Ответ №2:
Шаги:
- Вам нужно выполнить итерацию по вашему исходному массиву продуктов. продукты
- Каждый элемент (продукт) будет иметь формат {идентификатор: «», изображение: {«img1»: «img2», ..}} продукты [i]
- Вы получаете свойство изображения текущего продукта — это объект. продукты [i].изображение
- Теперь вам нужно выполнить итерацию по свойствам объекта изображения. продукты [i].изображение [j]
Код:
for(var i = 0; i < products.length; i )
{
for(var j in products[i].image)
{
// Here you have all the images for the current product.
// You can print them, group them or whatever you want to do with them
console.log(products[i].image[j]);
}
}
Также вы можете изменить код (ввести переменные), чтобы он был более читабельным.
Ответ №3:
var strs = (function( obj ) {
var ret = [];
for( im in obj ) {
ret.push( obj[im] );
//You could access each image URL here
//ad strs in the end will have all of them
//comma-separated after this code completes
// im is the key, obj[ im ] the value
}
return ret.join(',');
})( products[0].image );
console.log( strs );
Ответ №4:
Вот еще один способ сделать это, с более новыми функциями в ECMAScript 5
var images = Object.keys(products[2].image).map(function(key){
return products[2].image[key]
})
console.log(images) // Returns: ["test1.png", "test2.png", "test3.png", "test4.png", "test5.png", "test6.png", "test7.png"]
Как это работает:
Object#keys
возвращает массив имен ключей. Array#map
создает новый массив, используя ключи from Object#keys
. Просматривая ключ из объекта, вы получаете значение, которое будет именем изображения.