我有一個像array = [9,0,0,1,0,5,1,3,1]
數組。我要排序這個數組,並得到有序數組元素的另一個數組的索引。排序的數組,並在另一個陣列存儲其指數在JavaScript
即。排序後:
sortedArray = [0,0,0,1,1,1,3,5,9]
indexArray = [1,2,4,3,6,8,7,5,0]
有什麼辦法可以得到排序數組的索引?
我有一個像array = [9,0,0,1,0,5,1,3,1]
數組。我要排序這個數組,並得到有序數組元素的另一個數組的索引。排序的數組,並在另一個陣列存儲其指數在JavaScript
即。排序後:
sortedArray = [0,0,0,1,1,1,3,5,9]
indexArray = [1,2,4,3,6,8,7,5,0]
有什麼辦法可以得到排序數組的索引?
你可以嘗試這樣的事情:
(function() {
var arr = [9, 0, 0, 1, 0, 5, 1, 3, 1];
var _temp = arr.map(function(item, index) {
return {
index: index,
value: item
}
});
console.log(_temp)
_temp.sort(function(a, b) {
if (a.value < b.value) return -1;
if (a.value > b.value) return 1;
return 0;
});
console.log(_temp)
console.log(_temp.map(function(item) {
return item.value
}))
console.log(_temp.map(function(item) {
return item.index
}))
})()
像這樣的事情?
var array = [9,0,0,1,0,5,1,3,1];
var indexArray = [];
for (var i = 0; i < array.length; ++i) {
indexArray.push(i);
}
var sortedArray = array.sort();
console.log(sortedArray);
console.log(indexArray);
既然在陣列中的任何指標值的關聯,你需要建立第一:
var tmp = array.map(function (val, i) { return [i, val]; });
// [[0, 9], [1, 0], ..]
然後你對它進行排序:
tmp.sort(function (a, b) { return a[1] - b[1]; });
然後你解壓指數和/或值:
var indexArray = tmp.map(function (i) { return i[0]; });
擁有sortedArray後,您可以遍歷數組,並使用indexOf()
方法來獲取舊數組中各個元素的索引。例如。
sortedArray.forEach(function(ele){
indexArray.push(oldArray.indexOf(ele));
});
由於存在重複值,因此無法工作。 – deceze
我不明白什麼是indexArray在您爲例 – Enjoyted
@丹所以在另一個4.5秒你提供答案的後半部分...? – deceze
您可能需要一種中間數據格式來保存價值和索引,並根據價值對其進行排序。 – Yoshi