我有下一个数组:
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 = 24
和 tipo = 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);
如果有人能帮助我,我将不胜感激。
最佳答案
问题:
return false;
for
循环中的语句: 该函数将始终检查array 然后如果它不匹配,它将移动到 else
子句并返回 false
而不循环遍历其余元素。
解决方案:
您应该将 return 语句移出循环,这样如果数组中没有元素与传递的参数匹配,函数将返回 false
。
注意:正如@Taplar 的评论所说,最好返回一个 Truthy(无 falsy)值,例如 -1
,因为 splice()
方法会将 false
视为零 0
并删除第一项。
function eliminarElementoArray(array, val1, val2) {
for (var i = 0; i < array.length; i++) {
if (array[i].id == val1 && array[i].tipo == val2)
return i;
}
return -1;
}
var my_array = [{id: "10",tipo: "work"}, {id: "11",tipo: "work"}, {id: "24",tipo: "school"}, {id: "9",tipo: "work"}, {id: "25",tipo: "school"}];
console.log(eliminarElementoArray(my_array, "10", "work"));
console.log(eliminarElementoArray(my_array, "11", "fail test"));
console.log(eliminarElementoArray(my_array, "25", "school"));
关于javascript - 按字段名从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410553/