按字段名从数组中删除一个元素

7

我有一个数组:

0: {id: "10", tipo: "work"}
1: {id: "11", tipo: "work"}
2: {id: "24", tipo: "school"}
3: {id: "9", tipo: "work"}
4: {id: "25", tipo: "school"}

我想要做的是从数组中删除两个值匹配的元素,例如,如果id = 24tipo = school,则必须删除位置2上的数组。我有这个函数来通过值查找数组键:
function eliminarElementoArray(array,val1,val2){   
     for (var i=0; i<array.length; i++){
       if (array[i].id == val1 && array[i].tipo == val2)                    
          return i;
       else
          return false;
     }
 } 

在某些情况下,该函数不能正常工作,有时它会返回false,有时它会返回不正确的值。

最后,这是数组值被删除的地方,但由于前一个函数没有返回正确的值,因此它无法正常工作:

selected.splice( eliminarElementoArray(selected, id, tipo), 1);

如果有人能够帮助我,我将不胜感激。

请将您的对象数组以“文本”而不是“图像”的形式发布。 - A l w a y s S u n n y
1
仅从您的方法中观察,有时会返回false。而您正在将该响应提供给splice方法。这是无效的。您需要获取响应,检查它是否不是false,然后再将该响应提供给splice。 - Taplar
1
另外,根据您当前的逻辑编写方式,如果第一个元素不匹配,则会返回false,而不考虑数组中的任何其他元素。 - Taplar
是的,这就是问题所在,有时候它会返回false,但我不知道为什么,如果所有字段都匹配。 - U.C
就像我说的那样,如果它不匹配数组中的第一个元素,在第一次迭代中它会返回false。它没有机会进行更多的迭代。它正在从函数中返回并结束循环。 - Taplar
你想要什么输出 @U.C - chintuyadavsara
11个回答

0
首先,你应该使用 `===` 而不是 `==` 来比较字符串(tipo)。
其次,你需要删除 else 语句,因为有了这个 else 语句,你只会比较第一个元素;你的函数应该像这样:
```javascript function eliminarElementoArray(array, val1, val2) { for (var i = 0; i < array.length; i++) { if (array[i].id == val1 && array[i].tipo === val2) return i; } } ```
我希望这能帮到你 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接