javascript - 根据javascript中的另一个数组对数组进行排序

标签 javascript arrays sorting ecmascript-6

我有两个数组:

const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];

const sortOrder = ['n', 'z'];

所以我希望输出为 ['n', 'z', 'a', 'u', 'b', 'd'];

基本上是 originalArray 的顺序按照 secondArray 的顺序排序。

我可以基于第二个数组从原始数组中弹出元素,然后可以将它们追加到前面,这将给我所需的解决方案,但不确定这是否有效或者是否有更好的方法来使用array.sort(fxn);

const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];

const sortOrder = ['n', 'z'];
const reverseOrder = sortOrder.reverse();
for (let elem of reverseOrder) {
const indexofelem = originalArray.indexOf(elem);
 originalArray.unshift(originalArray.splice(indexofelem, 1)[0]);
}

console.log(originalArray);

最佳答案

您可以根据 sortOrder 数组中的匹配索引创建排序函数。

const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];

const sortOrder = ['n', 'z'];

function sortArrays(a, b) {
  var indexOfA = sortOrder.indexOf(a),
    indexOfB = sortOrder.indexOf(b);

  if (indexOfA == -1) {
    indexOfA = sortOrder.length + 1;
  }
  if (indexOfB == -1) {
    indexOfB = sortOrder.length + 1;
  }

  if (indexOfA < indexOfB) {
    return -1;
  }

  if (indexOfA > indexOfB) {
    return 1;
  }

  return 0;
}

originalArray.sort(sortArrays);

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

关于javascript - 根据javascript中的另一个数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755061/

相关文章:

javascript - 使用正则表达式在 css 文件中查找字体

javascript - 如何在Angular JS中基于ng-if值显示模式弹出窗口

javascript - 将带有普通对象数组的普通对象展开为平面普通对象

java - 使用字符串数组来标记每个条目的字母

r - 使用 R 中的外部因素排序对数据框进行排序

javascript - 在 JQuery UI 日期选择器中选择周数或日期

javascript - 重置 View 集合时如何触发渲染

php - 神秘的 2012 年 2 月 10 日未设置为数组

javascript - 当属性为字符串时,如何按属性从左到右对对象数组进行排序,首先是数字?

c# - 计数排序 - 实现差异