javascript - 在不更改索引的情况下重新排序数组
问题描述
我想在不更改索引值的情况下对数组进行排序。我怎样才能做到这一点?
大批:
let data = [];
data[12] = {"apples":1, "pears":2, "oranges":3};
data[25] = {"apples":3, "pears":3, "oranges":5};
data[18] = {"apples":4, "pears":1, "oranges":6};
我试过这个:
function reorder(b, a) {
return a - b;
}
但重新排序功能的输出是
data[0] = {"apples":3, "pears":3, "oranges":5};
data[1] = {"apples":4, "pears":1, "oranges":6};
data[2] = {"apples":1, "pears":2, "oranges":3};
我想实现这样的目标
data[25] = {"apples":3, "pears":3, "oranges":5};
data[18] = {"apples":4, "pears":1, "oranges":6};
data[12] = {"apples":1, "pears":2, "oranges":3};
解决方案
您似乎打算对索引进行排序。你可以这样做:
let data = [];
data[12] = {"apples":1, "pears":2, "oranges":3};
data[25] = {"apples":3, "pears":3, "oranges":5};
data[18] = {"apples":4, "pears":1, "oranges":6};
let keys = [];
for (key in data) keys.push(key);
for (var i = 0; i < keys.length; i++) {
for (var j = i + 1; j < keys.length; j++) {
if (keys[i] > keys[j]) {
var aux = keys[i];
keys[i] = keys[j];
keys[j] = aux;
}
}
}
问题是
var newObject = {};
for (let key of keys) newObject[key] = data[key];
data = newObject;
不一定会改变键的顺序:
这意味着如果您打算始终以降序进行迭代,那么您将需要keys
按照您喜欢的顺序迭代如上所示,并使用它来识别当前项目。
推荐阅读
- php - PHP 在从 Netezza 数据库读取数据时用问号替换特殊字符,仅在 Linux 上
- typescript - 如何在 Angular 5 (Typescript) 中生成不同类型的二维码
- javascript - 带有 HTML 和 JavaScript 内容的复制和粘贴按钮
- javascript - 如何在反应中单击注销时重定向到登录页面
- javascript - 将 Firebase 元素映射为数组
- c - MISRA C 2012 - 规则 21.1 - 以下划线开头的宏
- php - 适用于 Android 的 Chrome:如何在网页上启用适合移动设备的 '
- javascript - 如何从 valueOf() 中获取确切的日期和时间?
- javascript - 在电子邮件中使用 Java 脚本
- vuejs2 - Vue.js 从 mixin 添加属性