首页 > 解决方案 > 根据另一个单词数组对一组单词进行排序

问题描述

我有一个这样的数组:

unorderedArr = ['pear', 'apple', 'banana', 'peach', 'pineapple'];

我想根据另一个给定的数组来订购这个数组,如下所示:

order = ['peach', 'apple', 'pineapple']

首选结果是:

orderedArr = ['peach', 'apple', 'pineapple', 'banana', 'pear'];

不在 order 数组中的单词放在什么索引上并不重要。不保证 order 数组中的单词会在无序数组中

当前代码解决方案

我尝试使用这样的 switch 语句:

const orderedArr = []
unorderedArr.forEach(word => {
  switch (word) {
    case 'peach':
      orderedArr.push(word);
      break;

    case 'apple':
      orderedArr.push(word);
      break;

    case 'pineapple':
      orderedArr.push(word);
      break;

    default:
      orderedArr.push(word);
      break;
    }
});

但我发现 switch 语句并没有首先检查第一种情况。

标签: javascripttypescript

解决方案


您可以为排序顺序取一个对象,为没有顺序的项目取一个默认值。

var array = ['pear', 'apple', 'banana', 'peach', 'pineapple'],
    wanted = ['peach', 'apple', 'pineapple'],
    order = Object.assign({ default: Infinity }, ...wanted.map((v, i) => ({ [v]: i + 1 })));
    
array.sort((a, b) => (order[a] || order.default) - (order[b] || order.default));

console.log(array);


推荐阅读