2015-07-30 2 views
0

У меня возникают проблемы с идентификацией фактического индекса массива, который он сортирует.Сортировка Javascript Многомерный массив с использованием индекса

Мой список немного грязный:

masterList =[]; 
    masterList.push([1,"NY","New York, NY 10036, United States",40.760262,-73.993286,"07/30/2015"]); 
    masterList.push([2,"Chgo","Chicago, IL, United States",41.878113,-87.629799,"07/06/2015"]); 
    masterList.push([3,"Japan","Japan",11.1111,-11.1111,"07/22/2015"]); 
    masterList.push([4,"China","China",22.2222,-22.2222,"07/18/2015"]); 

masterList.sort(sortdates()); 

function sortdates(a,b) { 
     return function(a, b){ 
       a = Date(a[5]); 
       console.log(a); 
       b = Date(b[5]); 
       return a - b; 
      }; 
} 

Очевидно, что это не работает. Я хочу иметь возможность захватить 6-й указатель на многомерном массиве и отсортировать его.

Я пробовал искать везде .. но у меня нет «ключа», связанного с моим массивом .. поэтому я не могу использовать это, чтобы указать его. Любые предложения?

+1

Вместо 'masterList.sort (sortdates())' Вы должны написать 'masterList.sort (sortdates) '. Вы должны указать ссылку на функцию, а не называть функцию сортировки. – hgoebl

ответ

1

Есть три проблемы. Во-первых, вы должны передать дескриптор функции функции сортировки. Вместо этого вы вызываете функцию. Во-вторых, функция не должна возвращать функцию и должна принимать два параметра. В-третьих, самое главное, вам нужно создать new экземпляров объекта даты. Это не статический метод.

Вернувшийся функция может работать, так что реальная проблема у вас есть отсутствие на new ключевого слова

masterList =[]; 
    masterList.push([1,"NY","New York, NY 10036, United States",40.760262,-73.993286,"07/30/2015"]); 
    masterList.push([2,"Chgo","Chicago, IL, United States",41.878113,-87.629799,"07/06/2015"]); 
    masterList.push([3,"Japan","Japan",11.1111,-11.1111,"07/22/2015"]); 
    masterList.push([4,"China","China",22.2222,-22.2222,"07/18/2015"]); 

masterList.sort(sortdates); 

function sortdates(a,b) { 
       a = new Date(a[5]); 
       console.log(a); 
       b = new Date(b[5]); 
       return a - b; 
} 
+0

спасибо! hmm Я помещаю в console.log (masterList), но ничего не происходит .. массив, похоже, не сортируется? – SQLNub

+0

Хороший улов на отсутствующем «новом». Я полностью пропустил это. – forgivenson

+0

@SQLNub Кажется, сортировка. Я соберу лучшую демоверсию. –

-1

Как насчет использования underscore.js?

Затем вы можете использовать sortBy следующим образом:

var sorted = _.sortBy(masterList, function(value){ return new Date(value[5]).getTime(); }); 

Here is a fiddle with the solution

1

Похоже, у вас есть дополнительные функции там. Это будет работать лучше, не нужно возвращать другую функцию.

function sortdates(a,b) { 
    a = new Date(a[5]); 
    console.log(a); 
    b = new Date(b[5]); 
    return a - b; 
} 

Затем вы можете пройти sortdates (без ()) сортировать

+0

Я просто попытался использовать ваш предложенный код в комбинации без(), затем console.log (masterList); вскоре после .sort ... похоже, не отражает новый массив? – SQLNub

+1

'новая дата' сделала трюк. – Munick

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