我正在try 对数组元素进行排序,如下所示:

let defaultOrder = [
    {'item': 'Pen', 'value': '5'}, 
    {'item': 'Spike', 'value': '5'}, 
    {'item': 'Pencil', 'value': '5'}, 
    {'item': 'Ink', 'value': '5'}, 
    {'item': 'Mail', 'value': '5'}, 
    {'item': 'Rubber', 'value': '5'}
];

let items = [
    {'item': 'Spike', 'value': '5'}, 
    {'item': 'Duck', 'value': '5'}, 
    {'item': 'Ink', 'value': '5'}, 
    {'item': 'Pencil', 'value': '5'}, 
    {'item': 'Rubber', 'value': '5'}, 
    {'item': 'Mail', 'value': '5'}, 
    {'item': 'Pen', 'value': '5'} 
];

let orderedItems = items.sort(function (a,b){
    return defaultOrder.indexOf(a.item) - defaultOrder.indexOf(b.item)
});

我能够对元素进行排序,但是如何使未排序的元素(从{'item': 'Duck', 'value': '5'}开始)被追加到已排序的项的末尾?

推荐答案

你可以用一个对象来表示位置,用一个默认值来表示未知项.

const
    defaultOrder = [{ item: 'Pen', value: '5' }, { item: 'Spike', value: '5' }, { item: 'Pencil', value: '5' }, { item: 'Ink', value: '5' }, { item: 'Mail', value: '5' }, { item: 'Rubber', value: '5' }],
    order = Object.fromEntries(defaultOrder.map(({ item }, index) => [item, index + 1])),
    items = [{ item: 'Spike', value: '5' }, { item: 'Duck', value: '5' }, { item: 'Ink', value: '5' }, { item: 'Pencil', value: '5' }, { item: 'Rubber', value: '5' }, { item: 'Mail', value: '5' }, { item: 'Pen', value: '5' }];

items.sort((a, b) => (order[a.item] || Infinity) - (order[b.item] || Infinity));

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

Javascript相关问答推荐

JS、C++和C#给出不同的Base 64 Guid编码结果

JavaScript文本区域阻止KeyDown/KeyUp事件本身上的Alt GR +键组合

为什么getRecord()会因为与_logger相关的错误而失败?(使用Hedera SDK)

使用JavaScript单击上一个或下一个特定按钮创建卡滑动器以滑动单个卡

vscode扩展-webView Panel按钮不起任何作用

优化Google Sheet脚本以将下拉菜单和公式添加到多行

覆盖TypeScrip中的Lit-Element子类的属性类型

在forEach循环中获取目标而不是父对象的属性

第二次更新文本输入字段后,Reaction崩溃

使用Nuxt Apollo在Piniastore 中获取产品细节

同一类的所有div';S的模式窗口

在画布中调整边上反弹框的大小失败

如何在和IF语句中使用||和&;&;?

用于部分字符串的JavaScript数组搜索

如何在Java脚本中并行运行for或任意循环的每次迭代

我的NavLink活动类在REACT-ROUTER-V6中出现问题

将字符串解释为数字;将其重新编码为另一个基数

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

使用Java脚本筛选数组中最接近值最小的所有项

检测带有委托的元素内部的点击,以及元素何时按其类名被选中