Массивы Javascript
Давайте предположим, что у меня есть ассоциативный массив, как этот
var client1={
"id":"1"
"category":"Interiorism",
"photo1":"img/ClientCorp/photoClient1.jpg",
"photo2":"img/ClientCorp/photoClient2.jpg",
"photo3":"img/ClientCorp/photoClient3.jpg",
"photo4":"img/ClientCorp/photoClient4.jpg",
};
var client2={
.
.
.
};
allClients=[client1, client2..., clientx];
Я хочу установить функцию, которая нажимает клавиши фото в пустом массиве. Проблема в том, что не все клиенты имеют одинаковое количество фотографий, поэтому я использую "для". Вот функция, которую я написал
function photoKeys()
{
var keyList=Object.keys(allClients[id]);
var numKey=parseInt(listaKeys.length);
var photoAlbum=[]; //here I want to put the photo URL's
for (i=2; i<=numFotos; i++)
{
????????????
}
}
Вот проблема, как я могу записать объект фотографии из клиентского массива с помощью переменной i из функции for?
Я попробовал это, но не сработало
for (i=2; i<=numFotos; i++)
{
photoAlbum.push(allClients[id].photo+'i');
}
3 ответа
Прежде всего вы должны получить доступ к дорожкам для фотографий, например:
photoAlbum.push(allClients[id]['photo' + i]);
Но я действительно рекомендую вам изменить формат вашего клиентского объекта на что-то вроде этого:
var client1 = {
"id" :"1"
"category" :"Interiorism",
"photos" : [
"img/ClientCorp/photoClient1.jpg",
"img/ClientCorp/photoClient2.jpg",
...
]
};
Или вот, если вам нужно сохранить идентификаторы "photo1", "photo2":
var client2 = {
"id" :"1"
"category" :"Interiorism",
"photos" : [
{
"id" : "photo1",
"path" :"img/ClientCorp/photoClient1.jpg"
},
...
]
};
Затем вы можете выполнить их итерацию так:
for(var i = 0; i < allClients[id].photos.length; i++){
photoAlbum.push(allClients[id].photos[i]);
//or this for the second format:
//photoAlbum.push(allClients[id].photos[i].path);
}
Важно понимать, что client
в вашем примере это не массив, это объект.
var client1={
"id":"1"
"category":"Interiorism",
"photo1":"img/ClientCorp/photoClient1.jpg",
"photo2":"img/ClientCorp/photoClient2.jpg",
"photo3":"img/ClientCorp/photoClient3.jpg",
"photo4":"img/ClientCorp/photoClient4.jpg",
};
Вы можете получить ключи объекта в виде массива, используя Object.keys(client1)
или вы можете перебрать все ключи объекта, используя for...in
синтаксис.
Если вы хотите кормить произвольное число (numFotos
) значений свойств из вашего объекта в массив с именем photoAlbum
Вы можете использовать следующий синтаксис:
var i = 0;
for(var key in client1){
photoAlbum.push(client1[key]);
if(++i >= numFotos){
break; // break out of the loop if i equals or exceeds numFotos
}
}
Ваш текущий код будет проанализирован так:
photoAlbum.push(allClients[id].photo + 'i');
Было бы попытаться оценить allClients[id].photo
а затем добавить строку i
, Вам необходимо получить доступ к имени свойства, используя скобочные обозначения вместо точечных.
У вас также есть символ и строка назад, photo
это строка и i
ваша индексная переменная
photoAlbum.push(allClients[id]['photo' + i]);