我有一个小数组数组。小数组是属于一起的对象的ID。
faces = [[0,1,2,3],[4,5,6,7],[0,3,7,4],[1,2,5,6],[0,1 ,5,4],[2,3,7,6]];
我想根据较小数组内部值的计算对数组面进行排序。每个值代表一个z值。
设置:
我想要做的是根据小数组中表示的z值的平均值对数组面进行排序。
我正在尝试这个:
myArray.sort(function(a,b){
return b-a;
})
这是我到目前为止在排序对象[i] .faces array:
方面所拥有的objects[i].faces.sort(function(a,b){
var value1=0;
var value2=0;
for (var j = 0; j<objects[i].faces[a].length; j++) {
value1+=objects[i].vectors[faces[a][j]].z;
}
for (var j = 0; j<objects[i].faces[b].length; j++) {
value2+=objects[i].vectors[faces[b][j]].z;
}
return value1/objects[i].faces[a].length-value2/objects[i].faces[b].length;
})
目前正在抱怨他无法读取 undefined 的属性“长度”。
答案 0 :(得分:1)
a
和b
是待比较的项,而不是其索引。使用
var vectors = objects[i].vectors;
objects[i].faces.sort(function(a,b){
var value1 = 0,
value2 = 0;
for (var j=0; j<a.length; j++)
value1 += vectors[a[j]].z;
for (var j=0; j<b.length; j++)
value2 += vectors[b[j]].z;
return value1/a.length - value2/b.length;
})
答案 1 :(得分:0)
如果你说faces.sort(函数(a,b)....那么a已经是一个面部项目,那么为什么要调用面[a] ...它的a.length