我有点挑战。我正在使用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.
答案 0 :(得分:2)
或许这样的事情?
让我解释一下算法:
对于objects
中的每个对象:
2.1让当前对象被称为 obj 。
2.2使用map
生成一个名为 [obj,num] 元组的 元组 的新数组
每个lengthFromOrigin
个 obj 。
3.3将 元组 的所有项目推送到 A 。
在 元组[1] (即数字)升序< 上排序。< / p>
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
}
希望这会对你有所帮助