我想从数组(数组数组)中删除元素(数组)。
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);
}
}
答案 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
:
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;