2013-10-19 79 views
1

我有一點挑戰。我正在用javascript處理物理應用程序。正在使用的兩種主要對象是使用Javascript:排序對象挑戰

var force = new Object(); 
var torque = new Object(); 
with properties 
force.magnitude = newArray(); 
force.lengthfromorigin = new Array(); 
force.count; 
torque.lengthfromorigin= new Array(); 
torque.count; 

現在,我想這兩個對象到一個數組進行排序基於它們各自的lengthfromorigins

示例:force.lengthfromorigin = [5,8]和轉矩.lengthfromorigin = [2,6] 所以它們在本newArray順序將是[轉矩[0],力[0],扭矩[1],力[1]]

我的問題是有可能有一系列不同的對象按其各自的屬性排序,然後在一個函數中使用這個數組基於哪個對象位於索引的決策。我還需要在每個相應的對象中都有一個id屬性,以確定對象是否是扭矩或力。

例子:

if(newArray[i] == torque) 
    //do stuff 
else 
    //do other stuff. 
+0

1)有可能,2)請使用在下面的例子中 – mplungjan

+0

我認爲你正在試圖解決太多一次你的第一個例子。我首先編寫一個整數數組的排序方法,然後從那裏開始工作。 –

+0

其僞代碼@PsychHalf ... – bala

回答

2

像這樣的事情吧?

讓我解釋一下該算法:

  1. 創建一個新的陣列讓它被稱爲一個
  2. 對於每一個對象在objects

    2.1讓當前對象調用OBJ

    2.2使用map以產生稱爲元組[OBJ,NUM]元組 每個lengthFromOrigin號碼OBJ新的數組。

    3.3推送的元組所有物品進入一個

  3. 排序元組[1](這是數)上升。

var objects = [ 
     { type: 'force', lengthFromOrigin: [5, 8] }, 
     { type: 'torque', lengthFromOrigin: [2, 6] } 
    ], 
    sorted = objects.reduce(function (arr, obj) { 
     arr.push.apply(arr, obj.lengthFromOrigin.map(function (num) { 
      return [obj, num]; 
     })); 

     return arr;   
    }, []).sort(function (a, b) { 
     return a[1] - b[1];  
    }); 

console.log(sorted); 

然後你可以遍歷sorted,輕鬆地識別,如果它是一個扭矩通過查看元組中的第一個元素。

sorted.forEach(function (tuple) { 
    console.log(tuple[0].type, tuple[1]); 
}); 

//torque 2 
//force 5 
//torque 6 
//force 8 
+0

我喜歡,很好。 – bala

+0

@bala,如果你打算經常這樣做,你顯然可以將算法封裝在一個函數中:) – plalx

0

答案是

但你有訪問他們的屬性之前,以確定每個對象。在你的情況下,這兩個對象都有一個公共屬性,名爲lengthfromorigin可用於正確分類。

要標識每個對象,您可以使用屬性如ID名稱

if(Mydata[i].Name = 'torque'){ 
    //your code goes here 
} 
else if(Mydata[i].Name = 'force'){ 
    //your code goes here 
} 

希望這將幫助你

+0

爲什麼不使用面向對象的原則,並在每種對象類型上放置一個通用命名方法,以便爲該類型的對象,所以你不必看看它是什麼類型? – jfriend00