重构嵌套的数组集合

时间:2014-11-06 23:13:00

标签: javascript arrays data-structures

我有一个数组数组,其中每个内部数组包含三个项目:邮政编码,街道名称和日期数组[用于垃圾收集]。

用户将提供他们的邮政编码和门牌号,并且需要向他们显示相应的信息。在进行检查后,还需要能够为每个'集合数组'添加日期。

这是我的代码,但数据看起来很糟糕。怎么可以改进?

var postcodes = [
        ["BT161JR18", "Londonderry Park", [collectionArrayBT161JR18]], 
        ["BT161JR19",  "Ballyregan Cresent",  [collectionArrayBT161JR19]],
        ["BT161JR11", "Ballyregan Road",  [collectionArrayBT161JR11]],
    ]   ; 

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"];
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"];
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"];

3 个答案:

答案 0 :(得分:0)

你应该做的是使用对象数组而不是数组数组的数组... 例如,可以像这样设计相同的代码:

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"];
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"];
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"];

var postcodes = [
        {postcode: "BT161JR18", place: "Londonderry Park", dates: collectionArrayBT161JR18}, 
        {postcode: "BT161JR19", place: "Ballyregan Cresent", dates: collectionArrayBT161JR19},
        {postcode: "BT161JR11", place: "Ballyregan Road", dates: collectionArrayBT161JR11}
    ]   ; 

通过这种方式,您不需要记住索引(随着时间的推移会忘记索引),而是使用逻辑名称。

另请注意,您首先需要定义日期,然后将它们进一步包含在您的邮政编码结构中。


更新评论:搜索给定邮政编码的日期非常简单。

//for your code
function findDates(pc /*postcode to search*/)
    for (var i=0; i<postcodes.length; i++) {
        if (postcodes[i][0] === pc)
            return postcodes[i][2][0]
    return false
}
//for suggested code
function findDates(pc /*postcode to search*/)
    for (var i=0; i<postcodes.length; i++) {
        if (postcodes[i].postcode === pc)
            return postcodes[i].dates
    return false
}

答案 1 :(得分:0)

您应该使用邮政编码作为对象中的属性来创建主容器,而不是使用数组。这样,您就不需要遍历数组来查找邮政编码。

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"];
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"];
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"];

var postcodes = {
    BT161JR18: {place: "Londonderry Park",   dates: collectionArrayBT161JR18}, 
    BT161JR19: {place: "Ballyregan Cresent", dates: collectionArrayBT161JR19},
    BT161JR11: {place: "Ballyregan Road",    dates: collectionArrayBT161JR11}
}

答案 2 :(得分:-4)

在javascript中设置数组

    var postcodes = new Array();
    var collectionArrayBT161JR18 = new Array();
    var collectionArrayBT161JR19 = new Array();
    var collectionArrayBT161JR11 = new Array();