在 Javascript 中使用 Array.prototype.map() 时删除项目

Ian*_*Ian 12 javascript arrays

我目前有一个包含数字数组的变量

let numbersArray = [12, 15, 19, 20];
Run Code Online (Sandbox Code Playgroud)

当循环它时,如果它是某个值,我想删除该条目

let numbersArray = [12,15,19,20],
    filteredNumbersArray = numbersArray.map(function(value)
    {
        if(value === 15)
        {
            //delete the value
        } else {
            return value * 2;
        }
    });
Run Code Online (Sandbox Code Playgroud)

关于使用.filter(),值必须是可变的,我已经更新了示例

我已经搜索过MDN,但找不到任何有关删除map().

橡皮鸭也没有帮助

Nin*_*olz 8

您可以过滤然后映射

var array = [12, 15, 19, 20],
    result = array
        .filter(v => v !== 15)
        .map(v => 2 * v);
        
console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者使用所有数组操作的瑞士刀:Array#reduce

var array = [12, 15, 19, 20],
    result = array.reduce((r, v) => v !== 15 ? r.concat(v): r, []);
        
console.log(result);
Run Code Online (Sandbox Code Playgroud)

经过一些优化

var array = [12, 15, 19, 20],
    result = array.reduce(function (r, v) {
        if (v !== 15) {
            r.push(2 * v);
        }
        return r;
    }, []);
        
console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • @Ian:正如上面给出的,它也非常低效,为每次迭代创建一个**全新的数组**。如果你想为此使用“reduce”(除了清晰度下降之外,它不会给你带来任何好处),那么:“filtered = original.reduce((r, v) => { if (v !== 15) { r.push(v); } return r; }, []);` 所以它不会每次都复制数组。 (2认同)