2011-12-14 3 views
0

У меня есть большой массив в следующем формате:Как построить ассоциативный массив с jQuery/javascript?

var cars = [{"brand":"Honda","year":"2002"},{"brand":"Toyota","year":"2000"},{"brand":"Subaru","year":"2009"}];

массив очень большой (я сделал это мало для демонстрационной цели), и я хочу, чтобы организовать автомобили той же марки в массив, так что торговая марка будет ключом для каждого суба-массива, например:

carsByBrand [Honda [], Тойота [], субар []]

Я ожидал, что это будет прямо вперед, но это это не так. Я попытался несколько вариаций следующего кода, но каждый раз, когда он возвращается:

carsByBrand [item.brand] не определено

var carsByBrand = []; 

    $.each(cars, function(i,item){ 
    carsByBrand[item.brand].push(item); 
    }); 

    //console.debug(carsByBrand); //uncomment and look at this if you have Firebug 

    alert(carsByBrand.length); 

Я также попытался carsByBrand [пункт [ 'бренд ']], почему это не работает, и как это сделать?

jsBin: http://jsbin.com/orafos

ответ

3
carsByBrand[item.brand].push(item); 

Это будет работать только если массив для этой марки уже существует, что она не, если вы инициализировать его первым пустой массив.

Попробуйте

brand = carsByBrand[item.brand]; 
    if (brand) { 
     brand.push(item); 
    else {  
     carsByBrand[item.brand] = [item]; 
    } 
+0

нормально, я получил его. Благодарю. – ofko

Смежные вопросы