javascript - 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"]
。
解决方案
这不是对数组进行排序的最佳方法,但您的问题是您使用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));
推荐阅读
- android-studio - 我应该在 Kotlin 项目中将所有 annotationProcessor 更改为 kapt
- outsystems - Outsystem .doc 文件-错误错误本地标头签名:0xE011CFD0
- java - Java 函数类似于 C mktime()?
- java - Htmlunit 刷新页面事件
- html - 为什么我在某些浏览器中的元素上出现滚动条?
- r - 自动将 R 代码转换为 Matlab
- java - 我创建的应用程序不允许我保存图片?
- linux - Arin Bulk whois 数据 perl 无法在 @INC 中找到 BulkWhois/Schema.pm
- google-apps-script - 复选框更改值
- git - 如何在 Visual Studio 和 Github Desktop 中将具有不相关历史记录的代表推送到 github?