基于Javascript内部数组中的第二个值对嵌套数组进行排序

时间:2016-10-10 06:39:10

标签: javascript arrays sorting

我正在编写一个脚本,我必须根据内部数组的第二个元素对数组进行排序。例如,我在下面提到了数组:

var newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

我想根据内部数组中的所有字符串值对此数组进行排序。所以结果应该是:

var result = [
    [67, "Bowling Ball"],
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [7, "Toothpaste"]
];

为此,我写了以下脚本: 有没有其他方法可以做同样的事情?可能没有创建对象?



function arraySort(arr) {

  var jsonObj = {};
  var values = [];
  var result = [];
  for (var i = 0; i < arr.length; i++) {
    jsonObj[arr[i][1]] = arr[i][0];

  }
  values = Object.keys(jsonObj).sort();

  for (var j = 0; j < values.length; j++) {
    result.push([jsonObj[values[j]], values[j]]);
  }
  return result;
}

var newInv = [
  [2, "Hair Pin"],
  [3, "Half-Eaten Apple"],
  [67, "Bowling Ball"],
  [7, "Toothpaste"]
];


console.log(arraySort(newInv));
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:4)

您可以使用Array#sort

  

sort() 方法对数组的元素进行排序并返回数组。排序不一定是stable。默认排序顺序是根据字符串Unicode代码点。

String#localeCompare

  

localeCompare() 方法返回一个数字,指示引用字符串是在排序顺序之前还是之后或与给定字符串相同。

var newInv = [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]];
  
newInv.sort(function (a, b) {
    return a[1].localeCompare(b[1]);
});

console.log(newInv);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:3)

当然,像这样,使用cnn.Query<ModelClass>("SPGetData", new { StartDate=startDate??null, EndDate=endDate??null}, commandType:CommandType.StoredProcedure).ToList() 的{​​{3}}方法:

Array

这是一个片段:

 newInv.sort((a, b) => a[1].localeCompare(b[1]));

答案 2 :(得分:0)

sort outer array based on values in inner array, javascript的重复 在这里你会找到几个答案,比如我自己的

var arr = [.....]
arr.sort((function(index){
    return function(a, b){
        return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
    };
})(2)); // 2 is the index

对索引2进行排序