JS双数组删除元素

时间:2018-01-06 01:17:25

标签: javascript arrays

我想从数组(数组数组)中删除元素(数组)。

car = [carId, brand, year]; //array
selectedCars = []; //array of arrays

这就是我所尝试的,但这种比较永远不会成真,尽管它应该。

function removeElementFromArray(carsArray, car){
    var i;
    for(var k = 0; k < carsArray.length; k++){
        if(carsArray[k][0] == car[0]){
            i=k;
        }
    }

    var index = carsArray.indexOf(i);
    if(index != -1) {
        carsArray.splice(index, 1);
    }
}

2 个答案:

答案 0 :(得分:2)

carsArray.indexOf(i)永远找不到任何东西。 carsArray是一个数组数组,i是找到匹配项的索引,而不是数组。

您无需致电indexOf()for循环已找到您想要的索引。你只需要测试它是否找到了任何东西。

if (index !== undefined) {
    carsArray.splice(index, 1));
}

您还应将break;放入循环中,以便在找到匹配项后停止搜索。

事实上,你可以在循环中进行拼接。

for (var i = 0; i < carsArray.length; k++) {
    if (carsArray[k][0] == car[0]) {
        carsArray.splice(k, 1);
        break;
    }
}

答案 1 :(得分:0)

您可以尝试使用数组.every方法进行比较,如果可以使用es6,可以尝试使用.findIndex

&#13;
&#13;
car = ["carId", "brand", "year"]; //array
selectedCars = [["carId", "brand", "year"], ["otherCarId", "brand", "year"]]; //array of arrays

function removeCar(selected, car) {
    const index = selected.findIndex(selectedCar => selectedCar.every((val, i) => val === car[i]));
    if (index !== undefined) selected.splice(index, 1);
    return selected;
    
}

console.log(selectedCars);
removeCar(selectedCars, car);
console.log(selectedCars);
&#13;
&#13;
&#13;