2015-12-16 69 views
-1

我有一個像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] 

有什麼辦法可以得到排序數組的索引?

+0

我不明白什麼是indexArray在您爲例 – Enjoyted

+2

@丹所以在另一個4.5秒你提供答案的後半部分...? – deceze

+1

您可能需要一種中間數據格式來保存價值和索引,並根據價值對其進行排序。 – Yoshi

回答

1

你可以嘗試這樣的事情:

(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 
 
    })) 
 
})()

-1

像這樣的事情?

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); 
1

既然在陣列中的任何指標值的關聯,你需要建立第一:

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]; }); 
-1

擁有sortedArray後,您可以遍歷數組,並使用indexOf()方法來獲取舊數組中各個元素的索引。例如。

sortedArray.forEach(function(ele){ 
    indexArray.push(oldArray.indexOf(ele)); 
}); 
+0

由於存在重複值,因此無法工作。 – deceze

相關問題