正在重新构造数组的嵌套集合

Restructuring a nested collection of arrays

本文关键字:嵌套 集合 数组 新构造      更新时间:2023-09-26

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

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

这是我的代码,但数据结构似乎很糟糕。如何改进?

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"];

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

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
}

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

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}
}

在javascript 中设置数组

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