【问题标题】:How to delete an object in array in javascript如何在javascript中删除数组中的对象
【发布时间】:2021-08-11 21:37:52
【问题描述】:
[
  Employee {
    empId: 1000,
    empName: 'John',
    empSalary: 9123,
  },
  Employee {
    empId: 1001,
    empName: 'Doe',
    empSalary: 10000,
  },
  Employee {
    empId: 1002,
    empName: 'Jason',
    empSalary: 9812,
  },
  Employee {
    empId: 1003,
    empName: 'Jamie',
    empSalary: 6661,
  }
]

这是我的一组对象的数组。我想根据 ID 获取用户输入并从数组中删除。我尝试过使用 splice,但我不断收到错误。

var target = prompt("Enter id to delete:");
for(var i = 0; i < data.length; i++) {
    if(data[i].empId === target) {
        data.splice(i, 1);
        break;
    }
}

如果有人可以请帮助我,请做!

【问题讨论】:

  • 既然你在迭代,而不是拼接,你能否通过跳过要删除的 ID 将项目推送到新对象。因此,新对象将包含不包括要删除的项目的元素

标签: javascript arrays splice


【解决方案1】:

找不到任何错误,但是由于返回的数据是字符串类型,所以需要将提示结果转换为数字。

let data = [{
    empId: 1000,
    empName: 'John',
    empSalary: 9123,
  },
  {
    empId: 1001,
    empName: 'Doe',
    empSalary: 10000,
  },
  {
    empId: 1002,
    empName: 'Jason',
    empSalary: 9812,
  },
  {
    empId: 1003,
    empName: 'Jamie',
    empSalary: 6661,
  }
]


var target = prompt("Enter id to delete:");
for (var i = 0; i < data.length; i++) {
  if (data[i].empId === Number(target)) {
    data.splice(i, 1);
    break;
  }
}
console.log(data)

【讨论】:

    【解决方案2】:

    可能变量 targetString 类型,但 empIdNumber 类型。所以'1'不等于1。 我认为你应该替换这一行:

    if(data[i].empId === target) {
    

    下面一行:

    if(data[i].empId === +target) {
    

    【讨论】:

      【解决方案3】:

      数组中的 id 值是整数。您在提示符处添加的信息是一个字符串。您只需cast the string to a number

      const data = [{"empId":1000,"empName":"John","empSalary":9123},{"empId":1001,"empName":"Doe","empSalary":10000},{"empId":1002,"empName":"Jason","empSalary":9812},{"empId":1003,"empName":"Jamie","empSalary":6661}];
      
      var target = +prompt("Enter id to delete:");
      // ----------^
      
      for (let i = 0; i < data.length; i++) {
          if (data[i].empId === target) {
              data.splice(i, 1);
              break;
          }
      }
      
      console.log(data);

      或者,现在是首选选项,您可以使用 filter 创建一个新的更新数据数组:

      const data = [{"empId":1000,"empName":"John","empSalary":9123},{"empId":1001,"empName":"Doe","empSalary":10000},{"empId":1002,"empName":"Jason","empSalary":9812},{"empId":1003,"empName":"Jamie","empSalary":6661}];
      
      var target = +prompt("Enter id to delete:");
      
      const newData = data.filter(({ empId }) => empId !== target);
      
      console.log(newData);

      【讨论】:

      • 谢谢!!有用。我觉得这是一个很小的错误,我觉得很愚蠢,但是是的,这是可行的。过滤器也是一种更好的方法!
      • 祝你足球好运。
      【解决方案4】:

      对正在遍历的数组进行变异绝不是一个好主意。使用过滤器等较新的标准来拥有不同的数组并保持原始数组不变。

      此外,您可能对数据类型有疑问。 '===' 进行严格的类型检查。您可以使用 '==' 或将目标解析为数字。

      let newData = data.filter((employee) => {
      return (employee.empId != target)
      });
      

      newData 现在有您的数组,其中包含已删除目标 ID 的员工。

      【讨论】:

        猜你喜欢
        • 2019-12-13
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多