2013-10-19 44 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