簡體   English   中英

.splice()從數組中刪除2個對象而不是1

[英].splice() is removing 2 objects from array instead of 1

例如,當輸入'John Smith'時,slice會刪除前兩個員工姓名,而不是僅刪除John的員工姓名。 知道為什么會這樣嗎?

 let removeEmployee = ''; let employees = [ { name: 'John Smith' }, { name: 'Jackie Jackson' }, { name: 'Chris Jones' }, { name: 'Amanda Cullen' }, { name: 'Jeremy Goodwin' }, ] removeEmployee = prompt('Enter the name of the employee to be removed:'); function employeeExists(employee) { return employees.some(function(el) { return el.name === employee; }); } if (employeeExists(removeEmployee)) { employees.forEach(function(employee, index, object) { if (employee.name === removeEmployee) { object.splice(index, 1); } else { console.log(employee.name); } }); } else { console.log('That employee does not exist, please try again.'); } 

您可以使用filter而不是forEach使事情變得更簡單:

if (employeeExists(removeEmployee)) {   
    employees = employees.filter(e => e.name !== removeEmployee);
}

如果您仍想使用splice ,可以使用findIndex

 let employees = [ {name: 'John Smith'}, {name: 'Jackie Jackson'}, {name: 'Chris Jones'}, {name: 'Amanda Cullen'}, {name: 'Jeremy Goodwin'} ]; var removeEmployee = 'Chris Jones'; var index = employees.findIndex(e => e.name === removeEmployee); employees.splice(index, 1); console.log(employees); 

傑基傑克遜仍在名單中

你像這樣遍歷列表:

1
2
3
4
5

對於第一次iterration你在索引0 然后刪除索引0 (John Smith)。 此時 Jackie Jackson是新的指數0 ,但iterration跳轉到下一個元素(索引1 ),什么是Chris Jones

新索引0永遠不會登出到控制台! 但他仍然在名單中!

只需使用Array#filter功能即可刪除這些項目。 您不需要先檢查( 迭代 )然后使用forEach循環( 迭代 )。 你有2次迭代。 您只能在一次迭代中執行此操作。

 let employees = [ { name: 'John Smith', }, { name: 'Jackie Jackson' }, { name: 'Chris Jones' }, { name: 'Amanda Cullen' }, { name: 'Jeremy Goodwin'} ]; let name = prompt('Enter the name of the employee to be removed:'); employees = employees.filter(emp => emp.name.localeCompare(name)); console.log(employees); 

您可以使用findIndex查找對象的索引,其中name與提示的輸入相同。 使用該索引,您可以使用splice從employees數組中刪除項目

 let removeEmployee = ''; let employees = [{ name: 'John Smith' }, { name: 'Jackie Jackson' }, { name: 'Chris Jones' }, { name: 'Amanda Cullen' }, { name: 'Jeremy Goodwin' }, ] removeEmployee = prompt('Enter the name of the employee to be removed:'); function employeeExists(employee) { let ifEmployee = employees.findIndex(function(el) { return el.name === employee.trim(); }) return ifEmployee; } var employeIndex = employeeExists(removeEmployee); if (employeIndex !== -1) { employees.splice(employeIndex, 1) } else { console.log('That employee does not exist, please try again.'); } console.log(employees) 

你不需要forEach第三個第三個參數。 只需簡單地splice employees數組,如下所示。

 let removeEmployee = ''; let employees = [{ name: 'John Smith' }, { name: 'Jackie Jackson' }, { name: 'Chris Jones' }, { name: 'Amanda Cullen' }, { name: 'Jeremy Goodwin' }, ] // let letters = ['a', 'd', 'c'] removeEmployee = prompt('Enter the name of the employee to be removed:'); function employeeExists(employee) { return employees.some(function(el) { return el.name === employee; }); } if (employeeExists(removeEmployee)) { employees.forEach(function(employee, index) { if (employee.name === removeEmployee) { employees.splice(index, 1); } else { console.log(employee.name); } }); } else { console.log('That employee does not exist, please try again.'); } console.log(employees) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM