javascript - 根据另一个单词数组对一组单词进行排序
问题描述
我有一个这样的数组:
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 语句并没有首先检查第一种情况。
解决方案
您可以为排序顺序取一个对象,为没有顺序的项目取一个默认值。
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);
推荐阅读
- c - 如何在C中将int转换为short int?
- pandas - 如何用不同形状的数据框划分熊猫数据透视表?
- javascript - 通过类的文本样式设置不适用于 ProgressBar.js
- ios - 使 ViewController 成为单击按钮的侦听器,位于 TableViewCell xib 内的自定义视图内?
- apache-spark - Spark 结构化流中的等式过滤器
- c# - How to get counted words in files in BODY field?
- amazon-web-services - 在本地环境中将 NoSql (DynamoDB) 与 Elastisearch(不是 AWS 管理的)同步的最佳方式
- java - 将android包添加到java模块(android studio)
- html - 使用 VBA 和 HTML 的 Outlook 中 MailItem 表的特定列宽
- html - React 表单在基本 url 前面