首页 > 解决方案 > JavaScript:根据数组项中的数字重新排序数组

问题描述

我正在尝试解读一个数组。该数组包含乱序的字符串项,并附有一个数字以指定顺序应该是什么。我想获取数组项中的数字并重新分配数组项索引以反映该数字。例如var scrambled = ["pizza4", "to2", "I0", "eat3", "want1"]. 我有一个函数可以在数组中搜索附加的数字并返回值。现在我想获取返回的值并将其转换为新数组中新项目的索引,例如var unscrambled = []. 这是我到目前为止所拥有的:

function unscramblePhrase() {
    var scrambled = ["pizza4", "to2", "I0", "eat3", "want1"];   
    var unscrambled = [];
    for (var counter = 0; counter < scrambled.length; counter++) {
        numPosition = scrambled[counter].search('[0-9]');
        arrayIndex = scrambled[counter].substring(numPosition);
        console.log(arrayIndex);
        unscrambled.push(scrambled[arrayIndex]);
    }
 console.log(unscrambled)
}

我看到我的 arrayIndex 正在从加扰数组项的末尾提取数字,但我尝试根据此变量分配索引位置正在生成一个新加扰数组:["want1", "I0", "pizza4", "eat3", "to2"]

标签: javascriptarrays

解决方案


这不是对数组进行排序的最佳方法,但您的问题是您使用Array.prototype.push, 当您应该将值分配给unscrambled.

unscrambled[arrayIndex] = scrambled[counter];

但真正做到这一点的方法是Array.prototype.sort

function getNum(str){
    return Number(str.substring(str.length -1));
}


unscrambled.sort((a, b) => getNum(a) - getNum(b));

注意:此方法对您的数组进行就地排序。这可能好,也可能不好,具体取决于您的要求

但是您始终可以在克隆上使用它:

[...unscrambled].sort((a, b) => getNum(a) - getNum(b));

推荐阅读