javascript - 按字段名从数组中删除元素

标签 javascript jquery arrays

我有下一个数组:

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);

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

最佳答案

问题:

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/

相关文章:

javascript - 如何将十六进制字符串转换为字节数组,以及十六进制字符串中的字节数组?

javascript - 使用 jQuery 获取超出 Angular 范围的 h4 类 ="ng-binding"的文本内容

javascript - 警报 ('hello' );在 pageLoad() 函数中工作?

C++ 'substitute' 用于具有灵活数组成员的结构

javascript - 输入 key 表单提交因 HTML5 日期输入而失败

javascript - 覆盖正文区域的垂直侧边菜单

arrays - 一维数组到二维数组的映射

javascript - 使用 JavaScript 时如何在对象数据中使用可选链接?

javascript - 我从下一行的函数返回后,JS promisified 函数会单独运行吗

javascript - 简化随机顺序的 jQuery 函数