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]]joeで、Abdays[January[0]]01/23になります。

私がする必要があるのは、毎月のエントリを、誕生日が最初に来る順に並べることです。Abdays[January[0]]01/23ですAbdays[January[1]]が01/08なので、交換する必要があります。

これを入力しているときに、おそらく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に従って並べ替えるコードを作成する必要があります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 に答える