1

我在下面有这个 Javascript,我知道可能有更好的方法来做我所做的事情,所以如果你想分享更好的方法,请做,我一定会使用它。

var Apeople = ["bob", "joe", "jane", "mike", "henry", "alex"];
var Abdays = ["08/20", "01/23", "04/19", "08/16", "01/08", "04/02"];

Apeople 和 Abdays 互相排队,所以 Janes 的生日是 04/19。

我知道我不应该使用 eval() 所以如果你知道更好的方法请告诉我。

var mnths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
for(i=0; i<mnths.length; i++){
   eval("var "+mnths[i]+" = []");
}

for(i=0; i<Abdays.length; i++){
   var ab = Abdays[i];
   if(ab.substring(0,1) == "0"){
      var mn = ab.substring(1,2); //month number without 0 before it
   } else {
      var mn = ab.substring(0,2); //month number if 11 or 12
   }
   eval(""+mnths[mn-1]+".push(i)");
}

现在我有January=[1,4] April=[2,5] August=[0,3]. 我这样做是为了找出谁的名字和生日有关。

例如Apeople[January[0]],joeAbdays[January[0]]是 01/23。

我需要做的是按生日前的顺序排列每个月的条目。Abdays[January[0]]是 01/23 但是 01/08Abdays[January[1]]所以它们应该被交换。

当我输入这个时,我在想我可能应该使用 JSON。

所以我需要帮助的是将生日按顺序排列,同时仍然能够分辨出哪个生日对应哪个名字,同时可能找到更好的方法来编写这段代码。

4

2 回答 2

3

另一种方法。这利用了自定义排序功能。

​
var birthdays = [];

​birthdays[0] = { "name": "Bob", "month": 8, "day": 1 };
birthdays[1] = { "name": "John", "month": 4, "day": 2 };
birthdays[2] = { "name": "Jane", "month": 1, "day": 15 };

birthdays.sort( function( a, b ) { 

    if(a["month"] < b["month"] ) return -1;
    if(a["month"] > b["month"] ) return 1;
    if( a["day"] < b["day"] ) return -1;
    if( a["day"] > b["day"] ) return 1;

    return 0; //they are the same
});

额外的好处是您可以修改排序功能以满足您的需要。

于 2012-08-14T17:51:18.113 回答
1

您可以Abdays像这样对数组进行排序。

Abdays = Abdays.sort(function(a, b){
   var d1 = new Date(a + " 2010");
   var d2 = new Date(b + " 2010");
   return d1 > d2;
});

我随机选择了 2010。您将不得不对此进行修改,如果需要添加更多条件并编写代码以Apeople根据 sorted 进行排序Abdays

更新:

写得很快。您可以找到更好的方法,但希望这会有所帮助

var map = {};
for(var i=0 ; i < Apeople.length; i++){
   map[Abdays[i]] = Apeople[i];
}

Abdays = Abdays.sort(function(a, b){      
   var d1 = new Date(a + " 2010");
   var d2 = new Date(b + " 2010");
   return d1 > d2;
});

for(var i=0 ; i < Apeople.length; i++){
   Apeople[i] = map[Abdays[i]];
}

console.log(Apeople, Abdays);
于 2012-08-14T17:30:39.457 回答