【问题标题】:Converting array of strings into numbers将字符串数组转换为数字
【发布时间】:2016-10-01 21:09:48
【问题描述】:

我正在尝试将这个字符串数组(都是整数)转换为数字数组。由于某种原因,当我使用以下函数时,它不会将数组中的第一个字符串更改为数字。我不确定为什么。谁能给我解释一下?

var listArray = ['7', '4', '2', '12', '9'];
function makeNums(){
  for(var i = 0; i < listArray.length; i++){
    listArray[i] = parseInt(listArray[i], 10);
    listArray.sort(function(a,b) { return a - b; });
    console.log(listArray[i]);  
  }

}

makeNums();

【问题讨论】:

  • 在将字符串转换为整数之后排序 不是在转换期间。它现在正在尝试对字符串和数字进行排序 :( 它会移动字符串,因此您无法将它们全部转换为整数。
  • 你为什么不直接做listArray.map(function(num){ return 1*num}).sort(function(a,b) { return a - b; })
  • 为什么要尝试在循环内排序?
  • 为什么你认为你不能使用map-方法?

标签: javascript arrays for-loop parseint


【解决方案1】:

你可以用Number作为回调将其转换为数字,然后排序。

var listArray = ['7', '4', '2', '12', '9'].map(Number);
console.log(listArray);
listArray.sort(function (a,b) { return a-b; });
console.log(listArray);

或者你可以先排序,因为隐式转换为数字,然后将项目转换为数字。

var listArray = ['7', '4', '2', '12', '9'];
listArray.sort(function (a,b) { return a-b; });
console.log(listArray);
listArray = listArray.map(Number);
console.log(listArray);

【讨论】:

  • 这在控制台中有效,但与我正在处理的其余问题无关。这是一个很好的答案。谢谢妮娜!
【解决方案2】:

将排序移到迭代之外。这样,在处理完数组之前它不会排序。尝试运行下面的代码 sn-p:

var listArray = ['7', '4', '2', '12', '9'];
function makeNums(){
  for(var i = 0; i < listArray.length; i++){
    listArray[i] = parseInt(listArray[i], 10); 
  }
  listArray.sort(function(a,b) { return a - b; });
  console.log(listArray); 
}

makeNums();

【讨论】:

  • 我不能使用 map 方法,这个答案满足了我正在处理的一个更大问题的需要。感谢您的照明!
猜你喜欢
  • 2017-11-27
  • 1970-01-01
  • 2012-01-10
  • 2011-06-18
  • 2018-03-08
  • 2021-12-04
相关资源
最近更新 更多