如何将split数组中的每个字符串转换为数字?

时间:2017-03-03 04:49:45

标签: javascript arrays

我有一个需要拆分并转换为数字的字符串。我决定拆分字符串并将字符串放入数组中,然后使用Array.prototype.every()函数和Number()函数将它们转换为数字。

当我检查第一个数组元素的类型时,我看到我仍然有一个字符串,而不是一个数字。我的错误在哪里?答案here使得它看起来像分裂后JS会自动转换为数字,但这并不是通过记录第一个元素的类型来证明的。

function detectOutlierValue(string) {
    // convert string into array with numbers, 'separator " "
    var numArray = string.split(' ');
    console.log(typeof numArray[0]);
    console.log(numArray);

    numArray.every(function (item) {
        return Number(item);
    });
    console.log(numArray, typeof numArray[0]);

我的输出是:

string
[ '2', '4', '7', '8', '10' ]
[ '2', '4', '7', '8', '10' ] 'string'

4 个答案:

答案 0 :(得分:4)

你的数组方法很混乱。 Array.prototype.every用于确定数组中的每个元素是否满足回调指定的特定条件。基本上,您的代码将每个元素转换为数字,然后转换为every的布尔值,如果回调函数为其调用的每个元素返回true,则every将返回一个布尔值。

相反,您正在寻找Array.prototype.map,它会对每个元素执行一个函数,并将它们映射到一个新值:

var splitString = string.split(' ');
var numArray = splitString.map(Number);

这会将Number构造函数(它是回调)映射到将其转换为数字的每个元素。请注意numArray保存已转换的数组,但splitString仍包含字符串数组。如果字符串不是数字,Number将返回NaN

答案 1 :(得分:1)

您未正确使用everyevery测试以查看某个数组的每个元素对于某个条件是否为真。因此,对于数组中存在的每个元素,您将使用一次函数,直到它找到一个返回falsy值的元素。如果找到这样的元素,则every方法立即返回false。你想要的是map



function detectOutlierValue(string) {
  // convert string into array with numbers, 'separator " "
  var numArray = string.split(' ');
  console.log(typeof numArray[0]);
  console.log(numArray);

  numArray = numArray.map(function(item) {
    return Number(item);
  });

  console.log(numArray, typeof numArray[0]);
}

detectOutlierValue("1 2"); 




这可能是你想用every做的,但它没有意义,因为使用map

更好



function detectOutlierValue(string) {
  // convert string into array with numbers, 'separator " "
  var numArray = string.split(' ');
  console.log(typeof numArray[0]);
  console.log(numArray);

  var newArr = [];

  numArray.every(function(item) {
    newArr.push(Number(item));
    return true;
  });

  console.log(newArr);
}

detectOutlierValue("1 2");




答案 2 :(得分:0)

  

every()方法测试数组中的所有元素是否都通过了由提供的函数实现的测试。

来源:MDN

因此,您不应该使用every()方法,而是可以执行以下操作。



var s = "2 3 4 7 8 10";

function detectOutlierValue(string){
// convert string into array with numbers, 'separator " "
	var numArray = string.split(' ');
  
  numArray.every(function (item){
		return Number(item);
	});
  console.log(numArray, typeof numArray[0]);
  
  for(var i=0; i<numArray.length; i++){
  	numArray[i] = Number(numArray[i]);
  }
  console.log(numArray, typeof numArray[0]);
}  

detectOutlierValue(s);
&#13;
&#13;
&#13;

运行代码并注意两个控制台输出之间的区别。

答案 3 :(得分:0)

every用于检查数组的每个元素是否通过了某些测试。例如:

function isAString(val) {
  return typeof val === 'string'
}
var array =     [ '2', '4', '7', '8', '10' ];
array.every(isAString) //returns true

您要做的是使用map方法

var array = [ '2', '4', '7', '8', '10' ];
var result = array.map(function (x) { 
  return Number(x); 
});