Javascript 使用保存原始索引字段将数组转换为对象

Javascript 使用保存原始索引字段将数组转换为对象,javascript,jquery,Javascript,Jquery,我有一个按以下方式排序的数组 var items = [2.99, 5.99, 23.99, 1.99]; items.sort(function(a,b) { return a - b;}); 这将产生以下结果: [1.99, 2.99, 5.99, 23.99] 但我需要一种排序方法,但要保留原始索引的索引,例如 [3: 1.99, 0: 2.99, 1: 5.99, 2:23.99] 任何帮助都将不胜感激。将其映射到对象数组 因此,在生成的数组中,每个成员都是一个对象,具有保存数字的

我有一个按以下方式排序的数组

var items = [2.99, 5.99, 23.99, 1.99];
items.sort(function(a,b) { return a - b;});
这将产生以下结果:

[1.99, 2.99, 5.99, 23.99]
但我需要一种排序方法,但要保留原始索引的索引,例如

[3: 1.99, 0: 2.99, 1: 5.99, 2:23.99]

任何帮助都将不胜感激。

将其映射到对象数组

因此,在生成的数组中,每个成员都是一个对象,具有保存数字的
n
属性和保存原始索引的
i
属性

然后,您可以迭代该数组并像普通数组一样获取数据。
var项目=[2.99,5.99,23.99,1.99];
var arr\u of_objs=items.map(函数(n,i){
返回{n:n,i:i};
}).排序(功能(a、b){
返回a.n-b.n;
});
forEach(函数(obj,i)的arr_{
this.textContent+=“编号:”+obj.n+”,原始idx:“+obj.i+”,新idx:“+i+”\n”;
},document.querySelector(“pre”)
var项目=[2.99,5.99,23.99,1.99];
var可排序=[];
对于(变量i=0;iconsole.log(可排序)不幸的是,在这种情况下,JS get排序是不可能的。JS只将数组理解为[0:1.99,1:2.99,3:23.99]——您不能更改索引的顺序。但您可以使用数组数组或对象数组来解决此问题

var itemsObj = []; 
items.forEach(function(value, index) { 
    itemsObj.push({
        value: value, 
        index: index 
    });
});

Live Demo--

结果所需的阵列无效,但您可以执行以下操作:

 [{index:3, value: 1.99}, {index: 0, value: 2.99}, {index: 1, value: 5.99}, {index:2, value:23.99}]
首先创建一个数组,其中包含持久化索引的对象:

items.sort(function(a,b) { return a.value - b.value;});
然后您可以按如下方式对它们进行排序:

 [{index:3, value: 1.99}, {index: 0, value: 2.99}, {index: 1, value: 5.99}, {index:2, value:23.99}]
你会得到一大堆这样的东西

// Variables
var items = items_sort = [2.99, 5.99, 23.99, 1.99];
var order = new Array();

// Sort array
items_sort.sort(function(a,b) { return a - b;});

// Get order
for (i = 0; i < items.length; i++) {
    order[i] = items.indexOf(items_sort[i]);
}

您可以使用两个数组和
indexOf()
方法:

var items = [2.99, 5.99, 23.99, 1.99]
var itemsWithIndex = [];
for (i=0; i<items.length; i++) { itemsWithIndex[i] = [i+1, items[i]]; }
itemsWithIndex.sort(function(a,b) { return a[1]-b[1]; });
//变量
var items=items_sort=[2.99,5.99,23.99,1.99];
var order=新数组();
//排序数组
排序(函数(a,b){返回a-b;});
//得到命令
对于(i=0;i
将索引硬编码到数组中:

var items = [2.99, 5.99, 23.99, 1.99]
for (i=0; i<items.length; i++) { items[i] = [i+1, items[i]]; }
items.sort(function(a,b) { return a[1]-b[1]; });
<代码>var项目=[2.99、5.99、23.99、1.99] var itemsWithIndex=[]; 对于(i=0;i