2013-05-13 3 views
2

Я хотел бы создать массив из многомерного массива, как это:Как создать простой массив из массива массива с JavaScript?

var dataItaly = [ 
/*Town  Region City*/ 
    ["Castelspina","Piemonte","Alessandria" ], 
    ["Cavatore","Piemonte","Alessandria" ], 
    ["Cella Monte","Piemonte","Alessandria" ], 
    ["Cereseto","Piemonte","Alessandria" ], 
    ["Cantarana","Piemonte","Asti" ], 
    ["Capriglio","Piemonte","Asti" ], 
    ["Casorzo","Piemonte","Asti" ], 
    ["Albino","Lombardia","Bergamo" ], 
    ["Algua","Lombardia","Bergamo" ], 
    ["Abbiategrasso","Lombardia","Milano" ], 
    ["Agrate Brianza","Lombardia","Milano" ], 
    ["Aicurzio","Lombardia","Milano" ], 
    ["Almese","Piemonte","Torino" ], 
    ["Alpette","Piemonte","Torino" ], 
    ["Alpignano","Piemonte","Torino" ], 
    ["Andezeno","Piemonte","Torino" ], 
    ["Albonese","Lombardia","Pavia" ], 
    ["Albuzzano","Lombardia","Pavia" ], 
    ["Arena Po","Lombardia","Pavia" ], 
    ["Badia Pavese","Lombardia","Pavia" ] 
]; 

это моя отправная точка ...

var region = "Piemonte" 
// array must appear the city of "Piemonte" 

function createArrayCity (dataItaly, region) { 
var arrayList; 
for (i = 0; i <dataItaly.length i) { 
  if the region === [1] { 
    arrayList [2]. append; 
return arrayList; 
} 
} 
} 

Содержимое этого должно быть ArrayList [Алессандрия, Турин, Asti]. Если вар область = «Ломбардия» содержимое ArrayList является [Бергамо, Милан, Павие]

+0

Ребята спасибо за помощь. Для меня итерации в массиве по-прежнему являются жестким орехом. Теперь у меня есть база для изучения – David

ответ

1

Я хотел бы сделать это с помощью .map() и .filter():

var result = dataItaly.map(function(e) { 
    return e[1] === region ? e[2] : null; 
}).filter(function(e, i, a) { 
    return e !== null && a.indexOf(e) === i; 
}); 

N.B .: Эти методы довольно новы, и некоторые старые браузеры могут их не поддерживать. Вы должны использовать прокладки (от here и here), чтобы исправить совместимость.

1

Вы можете использовать CONCAT, чтобы объединить массивы:

var dataItaly = [ 
    ["Castelspina","Piemonte","Alessandria" ], 
    ["Cavatore","Piemonte","Alessandria" ], 
    ["Cella Monte","Piemonte","Alessandria" ], 
    ["Arena Po","Lombardia","Pavia" ], 
    ["Badia Pavese","Lombardia","Pavia" ] 
]; 
var merged = []; 
merged = merged.concat.apply(merged, dataItaly); 

удалить дубликаты (если вы хотите, что) вы могли бы делать:

merged = merged.filter (function (v, i, a) { return a.indexOf (v) == i }); 
0

Попробуйте

function createArrayCity (dataItaly, region) { 
    var arrayList = []; 
    for (i = 0; i <dataItaly.length; i++) { 
     if (dataItaly[i][1] === region && indexOf(arrayList, dataItaly[i][2]) == -1) { 
      arrayList.push(dataItaly[i][2]) 
     } 
    } 
    return arrayList; 
} 

function indexOf(array, obj){ 
    if(typeof array.indexOf == 'function'){ 
     return array.indexOf(obj); 
    } 
    for (i = 0; i <array.length; i++) { 
     if(array[i] == obj){ 
      return i; 
     } 
    } 
    return -1; 
} 


console.log(createArrayCity(dataItaly, 'Lombardia')) 

Демо: Fiddle

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