将数组转换为保存原始索引字段的对象
Convert array to object with saving original index field
我有一个数组,按以下方式排序
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 items = [2.99, 5.99, 23.99, 1.99];
var arr_of_objs = items.map(function(n, i) {
return { n:n, i:i };
}).sort(function(a, b) {
return a.n - b.n;
});
arr_of_objs.forEach(function(obj, i) {
this.textContent += "number: " + obj.n + ", orig idx: " + obj.i + ", new idx: " + i + "'n";
}, document.querySelector("pre"));
<pre></pre>
var items = [2.99, 5.99, 23.99, 1.99];
var sortable = [];
for (var i = 0; i < items.length; i++) {
sortable.push([i, items[i]]);
}
sortable.sort(function(a, b) {
return a[1] - b[1]
});
console.log(sortable);
不幸的是,在这种情况下,JS中无法进行get排序。JS只将数组理解为[0:1.99,1:2.99,3:23.99]——您不能更改索引的顺序。但您可以使用数组或对象数组来解决问题。
var items = [2.99, 5.99, 23.99, 1.99];
function PreserveKeysSorting(arr) {
var arr = arr
obj = [];
for(i in arr) {
obj.push({index: i, value: arr[i]});
}
obj.sort(function(a,b) { return a.value - b.value;});
return obj;
}
console.log(items);
console.log(PreserveKeysSorting(items));
现场演示--http://jsfiddle.net/u1g0xsap/1/
您想要的数组无效,但您可以执行以下操作:
首先制作一个数组,其中包含持久化索引的对象:
var itemsObj = [];
items.forEach(function(value, index) {
itemsObj.push({
value: value,
index: index
});
});
然后你可以这样排序:
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}]
将索引硬编码到数组中:
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]; });
请注意,为了清晰起见,添加了一个辅助变量(itemsWithIndex),但您也可以只更新原始数组:
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]; });
您可以使用两个数组和indexOf()
方法:
// 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]);
}
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 而循环只设置php中输入字段中的第一个值
- 在输入字段中将最小金额设置为
- 获取具有值的序列中最后一个输入字段的索引
- 如何使用Javascript查找一系列隐藏输入字段的索引
- 如何在任何索引字段中验证 ng-repeat 中的保存按钮
- 如何通过索引访问JSON对象中的字段
- 将数组转换为保存原始索引字段的对象
- 如何根据索引中控件的onchange事件设置mvc 5视图中隐藏字段的值
- 获取'未定义索引'错误'与上面的'字段
- 在表单中使用name属性中的增量索引创建新字段时,似乎不考虑变量
- 在2dsphere索引字段上查询没有返回有效结果
- 使用Vue JS复制输入字段,增加索引
- 在Mongoose / MongoDB中创建多字段(2个以上)索引
- 查找javascript的索引"对象数组"基于对象字段值
- 嵌套模式字段上的Mongoose文本索引
- MongoDB w/Mongoose-在哪里放置语法以确保跨越多个字段的索引
- 从挖空可观察对象的第 n 个索引中提取特定字段
- Express/Loopback/NodeJS是否有可能添加“索引”;到db字段
- 获得插入符号的位置(字符索引)在输入字段上掉落事件(FF, Chrome)