如何在javascript中删除数组中的对象

问题描述

[
  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 值为整数。您在提示符下添加的信息是一个字符串。您所要做的就是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,"empSalary":6661}];

var target = +prompt("Enter id to delete:");

const newData = data.filter(({ empId }) => empId !== target);

console.log(newData);

,

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

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

带有以下行:

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

找不到任何错误,但您必须将提示结果转换为数字,因为返回的数据是字符串类型。

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)

,

改变你正在遍历的数组从来都不是一个好主意。使用较新的标准,例如 filter 来拥有不同的数组,而保持原来的不变。

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

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

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