【问题标题】:Custom sorting in javascript ,sorting based on another fieldjavascript中的自定义排序,基于另一个字段的排序
【发布时间】:2015-07-16 11:18:40
【问题描述】:

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

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];

xArrayyArrayasc这样的顺序排序

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

我的问题是如何对elmArray 相对于xArrayyArray 进行排序 例如在xArray 排序后我想要elmArray 这样

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

yArray之后我想要这样

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

【问题讨论】:

  • 为什么要单独排序所有键?为什么不对对象数组进行排序?
  • “我有一些这样的信息,这些不是对象..只是个别数据” - 如果数据是相关的,那么它们应该是对象!相关可能意味着您想对一个相对于另一个进行排序。
  • 这是无数问题的重复。
  • 看看这个,github.com/Teun/thenBy.js

标签: javascript jquery arrays sorting


【解决方案1】:

首先,您必须将数据放入对象数组中。

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】:

    将它们排序为对象:

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

    【讨论】:

    • 嗯,确实如此,这里是来自MDN 的引用 - sort() 方法对数组的元素进行就地排序并返回数组。
    【解决方案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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多