如何在不使用外部库的情况下按short值降序排序inventory数组?
当然有靠谱的实现方式,而且两种思路都能轻松搞定——既可以直接对originalArray里的inventory数组原地排序,也可以先提取到中间变量再排序,全看你有没有保留原数组数据的需求。
方法一:原地排序(直接操作原数组)
如果你不介意修改原数组里的inventory(毕竟你最终只需要排序后的这个数组结果),直接用原生的sort()方法就行,这是最简洁高效的方式。sort()是原地排序,会直接调整原inventory数组的元素顺序,不需要额外的中间变量。
举个实际代码例子(假设你的originalArray结构类似下面这样):
// 示例原始数组 const originalArray = [ { groupId: "g1", inventory: [ { short: 4, label: "物品X" }, { short: 9, label: "物品Y" }, { short: 2, label: "物品Z" } ] } ]; // 按short值降序排序inventory数组 originalArray[0].inventory.sort((itemA, itemB) => itemB.short - itemA.short); // 输出排序后的inventory console.log(originalArray[0].inventory);
这种方式性能也没问题,因为JS引擎的sort()都是经过优化的排序实现(一般是Timsort或者类似的高效算法)。
方法二:提取副本排序(不修改原数组)
要是你想保留原inventory的原始顺序(比如后续还要用到未排序的数据),那先复制一份inventory数组,再对副本排序就好。浅拷贝完全够用,因为排序只是调整元素顺序,不会修改对象本身的属性。
示例代码:
const originalArray = [ { groupId: "g1", inventory: [ { short: 4, label: "物品X" }, { short: 9, label: "物品Y" }, { short: 2, label: "物品Z" } ] } ]; // 复制inventory数组(扩展运算符或slice()都可以) const sortedInventory = [...originalArray[0].inventory].sort((a, b) => b.short - a.short); // 输出排序后的结果,原数组不受影响 console.log(sortedInventory);
总结
两种方案都完全符合你的要求:
- 不需要任何外部库,只用原生JS就能实现;
- 不管是原地排序还是提取副本,都能得到按
short降序排列的inventory数组。
选哪种就看你有没有保留原数据的需求啦~
内容的提问来源于stack exchange,提问作者ukaric
相关产品推荐
相关产品推荐

