Javascript:排序对象挑战

时间:2013-10-19 04:17:51

标签: javascript arrays sorting object multidimensional-array

我有点挑战。我正在使用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;

现在,我想根据它们各自的长度来源将这两个对象排序成一个数组

示例:force.lengthfromorigin = [5,8]和torque.lengthfromorigin = [2,6] 所以他们在这个newArray中的顺序是[torque [0],force [0],torque [1],force [1]]

我的问题是否可以按照各自的属性排序不同对象的数组,然后在函数中使用此数组,该函数将根据索引处的对象做出决策。我还需要在每个相应的对象中都有一个id属性来识别对象是否是扭矩或力。

示例:

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

2 个答案:

答案 0 :(得分:2)

或许这样的事情?

让我解释一下算法:

  1. 创建一个新数组,将其称为 A
  2. 对于objects中的每个对象:

    2.1让当前对象被称为 obj

    2.2使用map生成一个名为 [obj,num] 元组的 元组 的新数组     每个lengthFromOrigin obj

    3.3将 元组 的所有项目推送到 A

  3. 元组[1] (即数字)升序< 上排序。< / p>

  4. 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 
    

答案 1 :(得分:0)

答案是

但是在访问其属性之前必须识别每个对象。在您的情况下,两个对象都有一个名为 lengthfromorigin 的公共属性,可用于对它们进行正确排序。

要识别每个对象,您可以使用 ID 名称等属性。

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

希望这会对你有所帮助