1

我有点挑战。我正在使用 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] 和 torque.lengthfromorigin=[2,6] 所以它们在这个 newArray 中的顺序是 [ torque[0], force[0], torque[1], force[1] ]

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

例子:

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

2 回答 2

2

大概是这样的?

让我解释一下算法:

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

    2.1 让当前对象被称为obj

    2.2用于为每个obj 的数量map生成一个名为tuples of [ obj , num] tuples 的新数组。lengthFromOrigin

    3.3 将所有元组项推入A

  3. tuple[1](即数字)升序排序A。

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 
于 2013-10-19T04:46:06.020 回答
0

答案是肯定的,

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

要识别每个对象,您可以使用IDName之类的属性。

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

希望对你有帮助

于 2013-10-19T04:54:32.020 回答