复制数组并删除字符串? Javascript

Copy array and remove strings? 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 = [];

如果您需要使用 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 method,它可以让你得到一个新数组,其中包含通过测试函数的旧数组中的每个元素。

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"
});

您实际上可以使用 arrow function 进一步缩短它。此代码执行完全相同的操作:

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");