说我有这样的数组:
[34, 55, 12, 66, 2, 43, 230, 67]
现在,如果我们按升序对此数组进行排序,则每个元素都会有一个新索引(从索引0开始)。
现在,我想要的是替换每个元素与索引+ 1 ,但保持元素的顺序。< / p>
期望的输出将是:
[3, 5, 2, 6, 1, 4, 8, 7]
我受限于Javascript和jQuery。我怎样才能做到这一点?
34到3背后的逻辑是,如果你要订购第一个数组,你会得到这个
[2,12,34,43,55,66,67,230]
有了这个 - 你可以看到34是新阵列中的第3个项目。所以它的新值应重置为3。
答案 0 :(得分:2)
您可以从原始数组中对重复项进行排序和过滤:
var input = [34, 55, 12, 66, 2, 43, 230, 67];
var sortedAndFiltered = input.concat().sort(function(a, b) {
return a - b;
}).filter(function(elem, index, self) {
return index == self.indexOf(elem);
});
var result = [];
for (var i = 0; i < input.length; i++) {
result.push(sortedAndFiltered.indexOf(input[i]) + 1);
}
alert(JSON.stringify(result));
// at this point the result variable will contain [3, 5, 2, 6, 1, 4, 8, 7]
&#13;
我们首先克隆原始数组,以避免sort
方法使用concat
方法对其进行修改。然后我们从结果数组中过滤重复的元素。最后,我们遍历原始数组的元素,并在已排序和过滤的数组中找到它们的索引。