循環,如果你想根據其元素的對象屬性Id值排序ARR1,然後放置在ARR2排列陣列ARR1排序號碼,以便最終ARR2將是:使用僅
var Arr2 = [{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}];
循環,如果你想根據其元素的對象屬性Id值排序ARR1,然後放置在ARR2排列陣列ARR1排序號碼,以便最終ARR2將是:使用僅
var Arr2 = [{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}];
我們可以使用bubble sort algorithm來排序或排列Arr1,然後遍歷Arr2將Arr1的排列元素遷移到Arr2。 在下面的解決方案中,我們不會使用任何本機方法進行排序,它只是循環和邏輯比較。
var Arr1 = [{Id:1,Name:'Ajay1'},{Id:5,Name:'Ajay5'},{Id:3,Name:'Ajay3'}];
var Arr2 = [{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}];
//var Arr1Res = [];
for (i = 0; i < Arr1.length; i++){
for (j = 0; j < (Arr1.length-1); j++){
if (Arr1[j].Id > Arr1[j+1].Id){
tmp = Arr1[j];
Arr1[j] = Arr1[j + 1];
Arr1[j + 1] = tmp;
}
}
}
// Migrating Arranged Arr1 to Arr2
for (x = 0; x < Arr2.length; x++){
for (y = 0; y < Arr1.length; y++){
if (Arr1[y].Id != Arr2[x].Id){
Arr2[y] = Arr1[y]
}
}
}
Arr1Res = Arr2 // You can replace Arr2 by Arr1 to check Arranged Arr1
for (k = 0; k < Arr1Res.length; k++){
alert(Arr1Res[k].Id+"---"+Arr1Res[k].Name)
}
結帳以下DEMO:
冒泡絕對沒有任何可取之處除了它朗朗上口的名字。它不是最快的,它甚至不是最容易寫的。
ExtractionSort和InsertionSort既快速又容易編寫。 (所有這三種排序的時間都與正在排序的元素數量的平方成正比,但後兩種排序的比例常數至少小兩倍。)
這裏的InsertionSort定義爲排序數組A就地。 (如果您不希望就地進行排序,先製作一個拷貝,然後就地排序複印件)。
function InsertionSort(A) {
var N = A.length;
if (N < 2) { return; }
// Simplify the main loop by first moving the smallest element to the front
var leastInx = 0, leastID = A[0].Id;
for (var i = 1; i < N; ++i) { // note: i++ is cuter, but ++i is often faster
var thisID = A[i].Id; // avoid doing the same work twice
if (thisId < leastId]) {
leastInx = i; leastId = thisId; }}
var tmp = A[0];
A[0] = A[leastInx];
A[leastInx] = tmp;
// Now iterate over the remaining elements, inserting each in its
// proper place among the already-sorted previous elements
for (i = 2; i < N; ++i) {
tmp = A[i];
for (var j = i; A[j-1].Id > tmp.Id; --j) { // no need to test j>0
A[j] = A[j-1]; }
A[j] = tmp; }
}
當然,內置的排序將有數量級的運行時間N log(N),這將吹走所有這些O(N ** 2)種類。編寫自己的排序程序會很有指導意義,如果沒有其他原因,我會推薦它,但如果您想讓速度充分利用專家的技能。
1)這不是問題,2)你的答案不起作用。 – Robert 2014-12-07 18:43:56
@Robert如果您選中了「Ask Question」,您會在帖子後面找到一個複選框,標記爲「回答您自己的問題 - 分享您的知識,問答風格」我爲此目的做了這個。 – SaidbakR 2014-12-07 21:33:43
對不起,但我認爲你仍然需要提出一個問題才能回答它。無論如何,我甚至不知道這是如何排序的,因爲結果似乎是隨機排列的。這個「問題」沒有說明這個結果是什麼樣的「Arr1」和「Arr2」,或者「將Arr1放在Arr2中」是什麼意思。其實我不知道你想達到什麼目的。 – Robert 2014-12-07 23:38:28