我对编程很陌生,我觉得以前也有人问过类似的问题。但我试着应用了它们,我知道我错过了一些基本的东西。
给定一个数组:
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是未定义的。这篇文章解释了如何使用正则表达式为/D的.replace方法从字符串中去除非数字,但我似乎无法将其用于数组(而不是函数)。因此,我尝试在其中插入一个"for"循环,以便它将每个元素视为自己的字符串。我知道我犯了一个愚蠢的错误,但尽管我尽力了,我还是认不出来。我在黑暗中开枪。
有什么建议吗?提前谢谢。
var myArray = ['24.203', '12*45', '000-1', '4567+00'];
var myNewArray = myArray.map(function(value) {
return parseInt(value.replace(/D/g, ''), 10);
});
D
是一个与所有非数字匹配的简写字符类。
当数组元素是字符串时,上面的代码可以工作。
您正确使用了正则表达式,并且正确使用了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
看起来更干净一些。如果您不熟悉map,请查看阵列map
函数的MDN文档