在javascript中自定义排序,基于另一个字段排序

时间:2015-07-16 11:18:40

标签: javascript jquery arrays sorting

我有这样的信息,这些不是对象..只是个人数据

name : 'element1', x: 30, y : 35
name : 'element2', x : 10, y:16
name : 'element3', x: 70, y:11

我已将所有三个信息推送到三个不同的阵列

var elmArray = ['element1','element2','element3'];
var xArray = [30, 10, 70];    
var yArray = [35, 16, 11];

按照xArray顺序对yArrayasc进行排序

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

我的问题是如何根据elmArrayxArrayyArray进行排序 例如xArray排序之后,我希望elmArray像这样

['element2', 'element1', 'element3'];

yArray之后,我希望它像这样

['element3', 'element2', 'element1'];

3 个答案:

答案 0 :(得分:3)

将它们排序为对象:

var array = [
    {name : 'element1' ,x: 30, y:35 },
    {name : 'element2', x: 10, y:16 },
    {name : 'element3', x: 70, y:11 }
]

var sorted = array.sort(function (prev, next) { return prev.x - next.x });

如果您想要单独的数据部分:

var elements = sorted.map(function (e) { return e.name });

答案 1 :(得分:3)

首先,必须将数据制作成一个对象数组。

var arr = [
    {name : 'element1' ,x: 30, y : 35},
    {name : 'element2', x : 10, y:16},
    {name :'element3', x: 70, y:11}];

然后你知道如何对数组进行排序!

arr.sort(function(a,b){ return a.x - b.x; } ); // sort by x

排序后,如果您想要一个只包含一个属性的数组,可以使用.map

var names = arr.map(function(e) { return e.name; });

答案 2 :(得分:3)

var elmarray = ['element1','element2','element3'];
var xarray = [30,10,70];    
var yarray = [35,16,11];
finalArray = sort(xarray, elmarray);
xarray = finalArray.first;
elmarray = finalArray.second;
console.log(xarray);
console.log(elmarray);

function sort(a, b){
   for (var index = 0; index < a.length-1; index += 1) {
            nextIndex = index + 1;
            if (a[index] > a[nextIndex]) {
                holder1 = a[nextIndex];
                holder2 = b[nextIndex];
                
                a[nextIndex] = a[index];
                b[nextIndex] = b[index];
                
                a[index] = holder1;
                b[index] = holder2;
              }
        }
    return { first: a,
            second: b}
}

另见http://jsfiddle.net/et5zL3ve/