2014-12-07 42 views
0

循環,如果你想根據其元素的對象屬性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'}]; 
+0

1)這不是問題,2)你的答案不起作用。 – Robert 2014-12-07 18:43:56

+0

@Robert如果您選中了「Ask Question」,您會在帖子後面找到一個複選框,標記爲「回答您自己的問題 - 分享您的知識,問答風格」我爲此目的做了這個。 – SaidbakR 2014-12-07 21:33:43

+0

對不起,但我認爲你仍然需要提出一個問題才能回答它。無論如何,我甚至不知道這是如何排序的,因爲結果似乎是隨機排列的。這個「問題」沒有說明這個結果是什麼樣的「Arr1」和「Arr2」,或者「將Arr1放在Arr2中」是什麼意思。其實我不知道你想達到什麼目的。 – Robert 2014-12-07 23:38:28

回答

0

我們可以使用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

2

冒泡絕對沒有任何可取之處除了它朗朗上口的名字。它不是最快的,它甚至不是最容易寫的。

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)種類。編寫自己的排序程序會很有指導意義,如果沒有其他原因,我會推薦它,但如果您想讓速度充分利用專家的技能。