首页 > 解决方案 > 复制数组并删除字符串?Javascript

问题描述

我正在尝试制作一个没有带有“x”的所有字符串的数组副本,并将没有这些“x”字符串的新数组归因于下面的(deCode)变量。使用 for 循环或 push/pop 或 join/split 方法。谁能指出我正确的方向?谢谢你

   var messageL = [ 'W', 'x', 'e', 'c', 'x', 'o', 'm', 'x', 'x', 'e', '\'', 'x', 's', ' ', 'h', 'o', 'x', 'm', 'x', 'x', 'e'];
var deCode = [];

标签: javascriptarraysstringfor-loopsubstring

解决方案


如果您需要使用 for 循环,您可以遍历数组并将每个元素推送到新数组。

var messageL = [ 'W', 'x', 'e', 'c', 'x', 'o', 'm', 'x', 'x', 'e', '\'', 'x', 's', ' ', 'h', 'o', 'x', 'm', 'x', 'x', 'e'];
var deCode = [];
for (let i = 0; i < messageL.length; i ++) {
    if (messageL[i] !== "x") {
        deCode.push(messageL[i]);
    }
}

不过,还有更好的办法。Javascript 有一个filter 方法,它可以让你得到一个新数组,其中包含通过测试函数的旧数组中的每个元素。

var messageL = [ 'W', 'x', 'e', 'c', 'x', 'o', 'm', 'x', 'x', 'e', '\'', 'x', 's', ' ', 'h', 'o', 'x', 'm', 'x', 'x', 'e'];


// The .filter function passes every element to the function that you provide. If the function returns true, then that element is copied into a new array. Otherwise, it is not. Note that it doesn't modify the old array
var deCode = messageL.filter(function (letter) {
    return letter !== "x"
});

您实际上可以通过使用箭头函数来进一步缩短它。这段代码做同样的事情:

var messageL = [ 'W', 'x', 'e', 'c', 'x', 'o', 'm', 'x', 'x', 'e', '\'', 'x', 's', ' ', 'h', 'o', 'x', 'm', 'x', 'x', 'e'];


var deCode = messageL.filter((element) => element !== "x");

推荐阅读