我对编程很陌生,我觉得以前也曾问过类似的问题。但我试图应用它们并且知道我遗漏了一些基本的东西。
给定一个数组:
var myArray = [24.203, 12*45, 000-1, 4567+00];
我想剥离所有非整数,所以我有这样的东西:
var myArray = [24203, 1245, 0001, 456700];
我知道.replace方法,但我似乎无法让它工作。以下是我尝试过的四件事:
function stripNonIntegers(arr) {
var x;
this.myArray = myArray;
for(x = 0; x < 10; x++) {
myArray[x] = myArray[x].replace(/\D/g, '');
} }
stripNonIntegers(myArray);
这会返回错误,指出myArray未定义。
var x;(myArray); { //I don't like the semicolons but I get an error if I omit them
for(x = 0; x < 10; x++)
{myArray[x] = myArray[x].replace(/\D/g, '');
} }
这会返回一个错误,指出x未定义。
stripNonIntegers= function(arr) {
for (x =0; x<this.length; x++)
myArray.replace(/\D/g,'');};
stripNonIntegers(myArray);
此输出未定义。
var stripNonIntegers= myArray[x]; {
for (x=0; x<myArray.length; x++) {
stripNonIntegers = myArray.replace(/[^\d]/g, '');
} }
这个人也说x未定义。 This post解释了如何使用带有/ D的正则表达式的.replace方法从字符串中去除非数字,但我似乎无法使用数组(不是函数)。因此,我尝试在那里粘贴一个'for'循环,因此它将每个元素视为自己的字符串。我知道我犯了一个愚蠢的错误,但是对于我所有的尝试,我无法识别它。我在黑暗中拍摄。
任何提示?提前谢谢。
答案 0 :(得分:3)
var myArray = ['24.203', '12*45', '000-1', '4567+00'];
var myNewArray = myArray.map(function(value) {
return parseInt(value.replace(/\D/g, ''), 10);
});
\D
是一个匹配所有非数字的速记字符类。
当您的数组元素是字符串时,上面的代码可以正常工作。
答案 1 :(得分:2)
您的正则表达式正确,并且您正确使用replace
。您的问题可能是数组中的项不是您提供的代码中的字符串。只需将每个引号括在引号中以使它们成为字符串:
var myArray = ['24.203', '12*45', '000-1', '4567+00'];
然后,您可以map
对阵列进行操作并使用replace
电话:
var newArray = myArray.map(function (item) {
return item.replace(/\D/g, '');
});
结果如下:
["24203", "1245", "0001", "456700"]
但这些仍然是字符串。要将它们转换为数字,您可以使用parseInt
:
var intArray = newArray.map(function (item) {
return parseInt(item, 10);
});
如果您愿意,可以一步完成所有这些:
var newIntArray = myArray.map(function (item) {
return parseInt(x.replace(/\D/g, ''), 10);
});
当然,如果您更喜欢常规的for
循环,那么您可以使用这些循环。但是,我认为使用map
看起来更清晰。如果您不熟悉地图,请查看the MDN docs for the array map
function