[英].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.