基于计算对数组中的数组进行JavaScript排序

时间:2014-02-12 21:22:19

标签: javascript

我有一个小数组数组。小数组是属于一起的对象的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值。

设置:

  • 我有一个名为objects的对象数组。
  • 每个对象都有一个名为vectors的矢量数组。
  • 每个向量有三个坐标:x,y,z。
  • 每个对象还有一个名为faces的数组。
  • Faces是向量的较小ID数组的数组。每个小数组都是一组向量。

我想要做的是根据小数组中表示的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 的属性“长度”。

2 个答案:

答案 0 :(得分:1)

ab是待比较的,而不是其索引。使用

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