2014-02-12 3 views
0

У меня есть массив небольших массивов. Малые массивы - это идентификаторы объектов, которые принадлежат друг другу.JavaScript сортировка по массиву в массиве на основе расчета

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-значение.

установки параметров:

  • У меня есть массив объектов, названных объектов.
  • Каждый объект имеет массив векторов, названных векторами.
  • Каждый вектор имеет три координаты: x, y, z.
  • Каждый объект также имеет массив, называемый лицами.
  • Faces - это массив меньшего массива идентификаторов для векторов. Каждый малый массив представляет собой кластер векторов.

Что я хочу сделать, так это отсортировать грани массива на основе среднего значения z-значения, которое представлено внутри небольших массивов.

Я основывая свою попытку на этом:

myArray.sort(function(a,b){ 
return b-a; 
}) 

Это то, что я до сих пор с точки зрения сортировки объектов [я] .faces массив:

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

вы можете включать в себя значение 'vectors', а также ожидаемый результат? –

+0

' 'Ā' и b' уже относятся к массиву в 'faces'. – thgaskell

ответ

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; 
}) 
+0

Это выглядит очень очевидно, когда вы говорите об этом, и это прекрасно работает. Спасибо! – Niddro

0

если вы говорите faces.sort (функция (а, Ь) .... то уже есть элемент граней так почему называют лиц [а] ... его a.length

Смежные вопросы