2013-05-13 142 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的[亚历山德里亚,都灵,阿斯蒂。 如果VAR区域=“伦巴第大区”的ArrayList内容为[贝加莫,米兰,帕维亚]

+0

家伙非常感谢您的帮助。对我而言,数组中的迭代仍然是一个艰难的任务。现在我有一个学习基地 – David 2013-05-14 16:31:41

回答

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 .:这些方法相当新颖,一些旧浏览器可能不支持它们。您应该使用垫片(从herehere)来修复兼容性。

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

相关问题