[英]Javascript: Sorting Objects Challenge
我有点挑战。 我正在使用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.
大概是这样吗?
让我解释一下算法:
对于对象中的每个objects
:
2.1让当前对象称为obj 。
2.2使用map
,以产生所谓的[OBJ,NUM]元组的每一个元组新的数组lengthFromOrigin
obj的号码。
3.3将所有元组推入A。
对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
答案是可以 ,
但是,您必须先识别每个对象,然后才能访问它们的属性。 在您的情况下,这两个对象都有一个共同的属性,称为lengthfromorigin ,可用于对它们进行正确排序。
要标识每个对象,可以使用ID或Name之类的属性。
if(Mydata[i].Name = 'torque'){
//your code goes here
}
else if(Mydata[i].Name = 'force'){
//your code goes here
}
希望这个能对您有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.