我有一个需要拆分并转换为数字的字符串。我决定拆分字符串并将字符串放入数组中,然后使用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'
答案 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)
您未正确使用every
。 every
测试以查看某个数组的每个元素对于某个条件是否为真。因此,对于数组中存在的每个元素,您将使用一次函数,直到它找到一个返回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;
运行代码并注意两个控制台输出之间的区别。
答案 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);
});