使用for循环(javascript)从多维数组中删除元素时遇到问题

Rem*_*ams 2 javascript multidimensional-array splice

我正在敲打我的那个头部靠近墙壁...

我有以下代码:

var guns2 = 
[
["Model 17", "Glock"],
["Model 19", "Glock"],
["PPQ", "Walther"],
["P2000", "HK"],
["Model 92", "Beretta"],
["Model 34", "Glock"]
]

var gunsMake = function () {
    for (i=0; i<guns2.length; i++){
        var make = guns2[i][1];
            if (make ==="Glock"){
                }
            else {
                guns2.splice(i,1);
                }
        };
    };
gunsMake();
console.log(guns2);
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到的结果如下:

[["Model 17", "Glock"], ["Model 19", "Glock"], ["P2000", "HK"], ["Model 34", "Glock"]]
Run Code Online (Sandbox Code Playgroud)

我想看到的是:

[["Model 17", "Glock"], ["Model 19", "Glock"], ["Model 34", "Glock"]]
Run Code Online (Sandbox Code Playgroud)

"["P2000","HK"]" 不应该在那里......我感觉它与for循环中的"guns2.length"参数有关.看起来它正在跳过后续数组每次拼接,但我无法完全修复我的大脑.

拜托,有人引导我吧:)

Asa*_*din 6

在迭代时修改数组通常不是一个好主意,因为很难跟踪索引和退出条件.将所需结果插入单独的数组中,或使用本机filter方法返回已过滤的数组.

var gunsMake = function (guns, desiredMake) {
    return guns.filter(function(v,i,a){
        return v[1] == desiredMake;
    });
};
guns2 = gunsMake(guns2, "Glock");
console.log(guns2);
Run Code Online (Sandbox Code Playgroud)

有关filterMDN 上的Array 方法的更多信息:数组过滤器方法