Сортировка многомерных массивов - PullRequest
1 голос
/ 10 марта 2012

У меня есть многомерный массив в JavaScript, определяемый как: -

myArray[0][0] = Some IMage;
myArray[0][1] = Some price;
myArray[0][2] = Some name;
myArray[0][3] = Some values;
myArray[0][4] = Some otherValues;
myArray[1][0] = Some IMage;
myArray[1][1] = Some price;
myArray[1][2] = Some name;
myArray[1][3] = Some values;
myArray[1][4] = Some otherValues;

Теперь моя работа - сортировать их по цене. Как это можно сделать?

Ответы [ 5 ]

5 голосов
/ 10 марта 2012

Согласно моему комментарию выше, вы, вероятно, должны использовать объекты вместо многомерных массивов. Вот пример (представьте, что ваши дополнительные атрибуты, такие как name и IMage включены, но я не включил их для удобства ввода)

var arr = [
    { price: 12, something: 'a b c' },
    { price: 8, something: 'a b c' },
    { price: 45, something: 'a b c' },
    { price: 10, something: 'a b c' }
];

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

/*
    arr is now:

    [ 
        { price: 8, something: 'a b c' },
        { price: 10, something: 'a b c' },
        { price: 12, something: 'a b c' },
        { price: 45, something: 'a b c' } 
    ]
*/
2 голосов
/ 10 марта 2012

Вот ответ без суждения о структуре данных в случае, если кто-то ищет вопрос.Иногда требуется «неправильная» структура, как эта (например: как вход для dataTables).

arr.sort(function(a, b) { return a[1] - b[1]; });
1 голос
/ 10 марта 2012

Заимствовано у Маршалла.

var myArray = [];
myArray.push({
    image: 'some image',
    price: 1.5,
    name: 'name',
    values: 'values',
    otherValues: 'otherValues'
});

myArray.push({
    image: 'some image2',
    price: 0.5,
    name: 'name2',
    values: 'values2',
    otherValues: 'otherValues2'
});

myArray.push({
    image: 'some image3',
    price: 2.5,
    name: 'name3',
    values: 'values3',
    otherValues: 'otherValues3'
});

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

alert(myArray[0].price);
alert(myArray[1].price);
alert(myArray[2].price);
1 голос
/ 10 марта 2012

Массивы имеют функцию сортировки, которая принимает другую функцию в качестве компаратора.Вы можете отсортировать данные следующим образом:

var comparator= function(a,b){
   var price1 = a[1], price2=b[1]; // use parseInt() if your "price" are quoted 
   if( price1 < price2) return -1;
   else return 1;
   return 0;
};
myArray.sort(comparator);
0 голосов
/ 20 декабря 2014

Многокритериальный Javascript / многопараметрическая сортировка

Если вы хотите отсортировать массив по одному значению или по нескольким значениям, вы можете определить следующую функцию:

function sortByCriteria(data, criteria) {
    return data.sort(function (a, b) {

        var i, iLen, aChain, bChain;

        i = 0;
        iLen = criteria.length;
        for (i; i < iLen; i++) {        
            aChain += a[criteria[i]];
            bChain += b[criteria[i]];
        }

        return aChain.localeCompare(bChain);
    });
}

Тогда вызовите так:

var data = [
    { price: 12, something: 'a b c' },
    { price: 8, something: 'a b c' },
    { price: 45, something: 'a b c' },
    { price: 10, something: 'a b c' }
];
var criteria = ["price", "something"];

sortByCriteria(data, criteria);

http://jsfiddle.net/oahxg4u3/6/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...