基于另一个数组对数组进行排序

时间:2017-02-14 13:35:45

标签: javascript

我有一个可以由以下任何值组成的数组:

input = ['S-1','S-2','S-3','S-4','S-5','S-6','S-7','S-8'];

'输入'可以由任何#这些值组成,没有任何重复。我试图找出如何排序&输入'按照排序'

的顺序排列
sortingArray = ["S-1", "S-5", "S-2", "S-6", "S-3", "S-7", "S-4", "S-8"];

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

您还可以使用过滤功能并获取sortingArray的副本,其中仅包含来自输​​入的值:

var input = ['S-1','S-2','S-3','S-4','S-5'];
var sortingArray = ["S-1", "S-5", "S-2", "S-6", "S-3", "S-7", "S-4", "S-8"];

var result = sortingArray.filter((el)=>(input.indexOf(el) > -1));
console.log(JSON.stringify(result));

答案 1 :(得分:2)

使用"排序数组"

构建一个查找对象
var indexes = sortingArray.reduce(function(lookup, key, index) {
  lookup[key] = index;
  return lookup;
}, {});

现在你可以在比较器函数中使用它:

input.sort(function(k1, k2) {
  return indexes[k1] - indexes[k2];
});

答案 2 :(得分:1)

简单地使用for循环。并将if条件应用于数组长度的一半。然后传递新数组



var input = ['S-1','S-2','S-3','S-4','S-5','S-6','S-7','S-8'];
var c =eval(input.length/2);
arr=[];
for(var i=0; i<input.length; i++){
  if(i < c)
    {
      arr.push(input[i]);
      arr.push(input[i+c]);
      }
       }
console.log(arr)
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以使用带有已排序数组索引的对象,并使用它对新数组进行排序。

&#13;
&#13;
var input = ['S-1', 'S-2', 'S-3', 'S-4', 'S-5', 'S-6', 'S-7', 'S-8'],
    sortingArray = ["S-1", "S-5", "S-2", "S-6", "S-3", "S-7", "S-4", "S-8"],
    order = Object.create(null);

sortingArray.forEach(function (a, i) { order[a] = i; });
input.sort(function (a, b) { return order[a] - order[b]; });

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