Массивы 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]);
Другие вопросы по тегам