如何在JavaScript中删除数组元素中的非整数

时间:2016-05-09 20:22:56

标签: javascript arrays methods replace

我对编程很陌生,我觉得以前也曾问过类似的问题。但我试图应用它们并且知道我遗漏了一些基本的东西。

给定一个数组:

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'循环,因此它将每个元素视为自己的字符串。我知道我犯了一个愚蠢的错误,但是对于我所有的尝试,我无法识别它。我在黑暗中拍摄。

任何提示?提前谢谢。

2 个答案:

答案 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