首页 > 解决方案 > 在不更改索引的情况下重新排序数组

问题描述

我想在不更改索引值的情况下对数组进行排序。我怎样才能做到这一点?

大批:

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};

标签: javascriptjqueryarrayssorting

解决方案


您似乎打算对索引进行排序。你可以这样做:

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按照您喜欢的顺序迭代如上所示,并使用它来识别当前项目。


推荐阅读