2016-11-18 11 views
0

私はjavascriptに新しいが、私は実際に私のワークフローに大きな違いをもたらすいくつかのスクリプトを作っている。しかし、私は現在、Javascriptでhowtoを行う方法を知らない方法でデータをソートするようなプロジェクトに着手しています。私はこのようにそれらを並べ替えるたいJavaScriptで配列、変数、オブジェクトを並べ替える

pagenumber[1,2,3,4,5] //only numbers 
zipcode[77889,99887,33667,11122,44559] // only numbers 
streetname[Hillroad, Hillroad, Baghdad Street, Hongway, Chinatown] //only letters 
roadnumber[55,27,1,13,16] //only numbers 

:私は唯一の4つの異なるアレイにデータを置くことができました、私は私のデータをエクセルにあったかのように何をする必要があるかを説明しようとしますが、それはイマイチ最初に郵便番号で、次に道路名で、次に降りる偶数の道路番号によって、次に奇数の道路番号が昇順で表示されます。 この新しい並べ替えによれば、私は新しいページ番号を生成したいと思いますが、(古い)変数 "pagenumber"に何らかの関係を持たせたいので、古いページを探し出し、新しいページ番号を付けて新しいドキュメントに展開することができます。私はあなたに私のためのすべてのコードを書くように求めていませんが、私はそれが私がそれが可能であるかどうかを知るためにちょっとだけアドバイスが必要です。第3に、もし彼らが互いにより密接に関連するようにデータを保存する(より)スマートな方法であれば。あなたの考えを教えてください。また、私はどこで何を読んでいいのですか?答えをありがとうございました。しかし私は、Web用ではなくAcrobat DCで自分のコードを書くことを指摘したいと思います。

+0

これらの配列のいずれかをソートするという点でこれまで何をしていますか?私たちにそれを表示してください。 – HenryDev

+0

私はそれを全くソートしなかった。ハウツーを知らない。でも私はする! – Heresh

+0

各配列の各インデックスが単一のエンティティ、つまりインデックス0 = 1,77889、Hillroad、55などを参照している場合、ある配列を並べ替えるときに、他の配列の順序を変更する必要がある場合は、私が考えることができるあなたのデータを保存する! –

答えて

2

あなたの配列内の項目が結ばれているとします。したがって、配列の代わりに[{},{},{},{},{}]を使用する必要があります。 var items = [{pagenumber:1,zipcode:77889,streetname:Hillroad,roadnumber:55},{...},{...},{...},{...}] は次に下記のように、1つずつ各キーと値のプロパティを並べ替える:

var x= [ {a:2,b:2,c:3}, {a:1,b:1,c:1}, {a:1,b:2,c:3}, {a:2,b:2,c:2} ]; 

x.sort(function(item1, item2){ 
    var sort_a = item1.a-item2.a; 
    if (sort_a) return sort_a; 
    var sort_b = item1.b-item2.b; 
    if (sort_b) return sort_b; 
    var sort_c = item1.c-item2.c; 
    if (sort_c) return sort_c; 
}) 

それとも

x.sort(function(item1, item2){ 
    return (item1.a-item2.a) || (item1.b-item2.b) || (item1.c-item2.c); 
}) 
+0

streetnameのような文字列のソートにどのように役立ちますか? –

+0

文字列の場合、 'item1.someStringKey.localCompare(item2.someStringKey)'を使用します。 – Xufox

+0

@Xufoxクールメソッド、私は文字列を比較するとは思わなかった。 – jiajianrong

1

がデータを与えられることに、それを簡素化:

まず
var pagenumber=[1,2,3,4,5]; //only numbers 
var zipcode=[77889,99887,33667,11122,44559]; // only numbers 
var streetname=['Hillroad', 'Hillroad', 'Baghdad Street', 'Hongway', 'Chinatown']; //only letters 
var roadnumber=[55,27,1,13,16]; //only numbers 

をデータをより簡単に管理できるようにする必要があります。

var data = pagenumber.map(function(itemValue, index) { 
    return { 
     pagenumber:itemValue, // == pagenumber[index] 
     zipcode:zipcode[index], 
     streetname:streetname[index], 
     roadnumber:roadnumber[index] 
    }; 
}); 

そして、そう...それを私はそれを避けることができたときに個人的に、私は中間ステップを使用していない

data.sort(function(a, b) { 
    return (a.zipcode - b.zipcode) || (a.streetname < b.streetname ? -1 : a.streetname > b.streetname ? 1 : 0) || (b.roadnumber % 2 - a.roadnumber % 2) || (a.roadnumber - b.roadnumber); 
}); 

に単純化することができる別の答えから

data.sort(function(a, b) { 
    if (a.zipzode != b.zipcode) { 
     // numeric 
     return a.zipcode - b.zipcode; 
    } 
    if (a.streetname != b.streetname) { 
     // alpha 
     return a.streetname < b.streetname ? -1 : a.streetname > b.streetname ? 1 : 0; 
    } 
    if (a.roadnumber % 2 != b.roadnumber % 2) { 
     // even before odd 
     return b.roadnumber % 2 - a.roadnumber % 2; 
    } 
    // numeric 
    return a.roadnumber - b.roadnumber; 
}); 

借入を並べ替えます以下は、マップをボットに相当し、ソート1つの連鎖コマンドで

var sortedData = pagenumber.map(function(itemValue, index) { 
    return { 
     pagenumber:itemValue, 
     zipcode:zipcode[index], 
     streetname:streetname[index], 
     roadnumber:roadnumber[index] 
    }; 
}).sort(function(a, b) { 
    return (a.zipcode - b.zipcode) || (a.streetname < b.streetname ? -1 : a.streetname > b.streetname ? 1 : 0) || (b.roadnumber % 2 - a.roadnumber % 2) || (a.roadnumber - b.roadnumber); 
}); 
+0

を比較してくださいこれを理解しようとしています。あなたはvalの意味を教えてもらえますか? – Heresh

+0

申し訳ありませんが、 –

+0

を書き直してみましょう。[Array#map](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) - コールバックパラメータについての部分を参照してください - 各項目に '(itemValue、index、array)'引数を指定して.mapへのコールバックを呼び出します配列 –

0
// sorting zipcode in ascending order 
zipcode.sort(); 
// sorting streetname in ascending order 
streetname.sort(); 
// fetching evenroad numbers 
var roadnumbereven=roadnumber.filter(function(element, index, array) { 
    return (element % 2 === 0); 
}); 
// fetching odd roadnumbers 
var roadnumberodd = roadnumber.filter(function(element, index, array) { 
    return (element % 2 !== 0); 
}); 
// sorting even road numbers in ascending order 
roadnumbereven.sort(); 
// sorting odd road numbers in descending order 
roadnumberodd.sort(function(a,b){ return b-a; }); 
// merging roadnumbers(even/odd) 
roadnumber = roadnumbereven.concat(roadnumberodd); 


console.log(roadnumber); 
関連する問題