【问题标题】:How do I create a simple array from an array of array with JavaScript?如何使用 JavaScript 从数组数组创建一个简单数组?
【发布时间】:2013-05-13 09:15:59
【问题描述】:

我想从这样的多维数组创建一个数组:

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 [Alessandria, Torino, Asti]。 如果 var region = "Lombardia" 则 arrayList 的内容为 [Bergamo, Milano, Pavia]

【问题讨论】:

  • 大家非常感谢您的帮助。对我来说,数组中的迭代仍然是一个难题。现在我有了学习的基地

标签: javascript arrays filter


【解决方案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;
});

注意:这些方法比较新,一些旧浏览器可能不支持它们。您应该使用垫片(来自herehere)来修复兼容性。

【讨论】:

    【解决方案2】:

    你可以使用 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 });
    

    【讨论】:

      【解决方案3】:

      试试

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-30
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 2017-03-17
        • 2013-06-22
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多