Javascript,排序数组的数字从最高到最低,但保持原来的索引



我有一个数字数组,我想从高到低排序,仍然能够保持原始数组引用原始索引。

我已经设法完成了我想要的代码在这里:

// Original array.
const originalArray = [3, 8, 2, 8, 6, 9, 8, 4];
// Creating a deep copy of an original array.
const deepCopy = [...originalArray].sort(function(a, b){
return b-a
});
// result array
const arr = [];
// count to get the index based on duplicate values.
let count = 0;
// Iterating deepCopy array to get the actual index.
deepCopy.forEach((elem) => {
// Checking for duplicate value in an array
if(originalArray.indexOf(elem) === originalArray.lastIndexOf(elem)) {
// This line of code execute if there is no duplicates in an array.
arr.push(originalArray.indexOf(elem))
}else{
// This line of code execute if there is duplicate values in an array. 
count++;
// Inserting the index one by one.
arr.push(originalArray.indexOf(elem, count))
}
});
// Result array.
document.write("Original Array<br/>"+originalArray+"    : Original Array");
document.write("<br/><br/>");
document.write("Original Index<br/>"+arr+"  : Orignal Index");
document.write("<br/><br/>");
document.write("Deep Copy<br/>"+deepCopy+"  : Sorted Array");
document.write("<br/><br/>");
// Index[0] = Original Array [2];   
for(n=0; n<arr.length; n++){
a2 = originalArray.indexOf(deepCopy[n]);
document.write(n+"] "+originalArray[a2]+" - Original Index: "+a2+"<br/>");
};
document.write("<br/>For the Number 8 at position 1,2,3- The indexes shold read 1,3 & 6 instead of three consecutive 1's");

我遇到的问题是有重复的数字-在这种情况下,数字8出现了三次,但当排序时,它只返回该数字的第一个发生率的索引-而不是显示索引1,3,6。

要详细说明@ epascarelo注释,可以映射复制的数组,以便在排序之前包含每个元素的索引。不需要将索引分离到单独的数组中。

// Original array.
const originalArray = [3, 8, 2, 8, 6, 9, 8, 4];
// Creating a deep copy of an original array.
const deepCopy = [...originalArray].map((e, i) => [e, i]).sort(function(a, b){
return b[0]-a[0]
});
// Result array.
document.write("Original Array<br/>"+originalArray+"    : Original Array");
document.write("<br/><br/>");
document.write("Deep Copy<br/>"+deepCopy+"  : Sorted Array");
document.write("<br/><br/>");

let n = 0
for(let [e, i] of deepCopy){
n++
document.write(n+"] "+ e +" - Original Index: "+ i +"<br/>");
};

// Original array.
const originalArray = [3, 8, 2, 8, 6, 9, 8, 4];
// Creating a deep copy of an original array.    
const deepCopy = [...originalArray].sort((a, b) => b - a);

// result array
const arr = [...originalArray.keys()].sort((a, b) => originalArray[b] - originalArray[a]);

// Result array.
document.write("Original Array<br/>"+originalArray+"    : Original Array");
document.write("<br/><br/>");
document.write("Original Index<br/>"+arr+"  : Orignal Index");
document.write("<br/><br/>");
document.write("Deep Copy<br/>"+deepCopy+"  : Sorted Array");
document.write("<br/><br/>");
// Index[0] = Original Array [2];   
for(n=0; n<arr.length; n++){
a2 = originalArray.indexOf(deepCopy[n]);
document.write(n+"] "+originalArray[a2]+" - Original Index: "+arr[n]+"<br/>");
};

或者交换a &末尾括号中的B从最低到最高

不知道为什么,但是前面的答案只是为我输出这个

[Array(2), Array(2), Array(2), Array(2), Array(2), Array(2)]

最新更新