Remove a Single Object from a Javascript Object
本问题已经有最佳答案,请猛点这里访问。
如何根据courseid和enddate从以下javascript对象中删除一个项目?
1 2 3 4 5 | window.MyCheckedCourses = [ { courseID: '123', endDate: '6/7/2010' }, { courseID: '123', endDate: '3/9/2003' }, { courseID: '456', endDate: '3/9/2003' } ]; |
迭代是必须的。您必须使用
1 2 3 4 5 6 7 | var i, id = '123', date = '6/7/2010'; for(var i = 0, il = MyCheckedCourses.length;i<il;i++) { if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) { MyCheckedCourses.splice(i, 1); break; } } |
您可以创建一个函数,并将其与这样的参数一起使用;
1 2 3 4 5 6 7 8 9 10 | function remove(id, date) { for(var i = 0, il = MyCheckedCourses.length;i<il;i++) { if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) { MyCheckedCourses.splice(i, 1); break; } } } // Example usage: remove('123', '6/7/2010'); |
伊恩评论后编辑:
我想你的收藏品是独一无二的。如果没有,则必须遍历所有项,并且必须向后执行,因为如果从数组中移除元素,则其索引将更改,迭代将无法正常工作。所以这个函数是一个更安全的版本;
1 2 3 4 5 6 7 8 9 | function remove(id, date) { for(var i = MyCheckedCourses.length - 1;i >= 0;i--) { if(MyCheckedCourses[i].courseID == id && MyCheckedCourses[i].endDate == date) { MyCheckedCourses.splice(i, 1); } } } // Example usage: remove('123', '6/7/2010'); |
可以使用splice:
一个例子:
1 2 | MyCheckedCourses=[0,1,2,3]; MyCheckedCourses.splice(1,1); |
要根据键值查找索引,可以使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // only returns the first found index function findBy(arr,keys){ var i = 0,match,len; for(i=0,len=arr.length;i<len;i++){ match=true; for(key in keys){ if(arr[i][key]!==keys[key]){ match=false; break } } if(match===true){ return i; } } return false; } var courses=[ { courseID: '123', endDate: '6/7/2010' }, { courseID: '123', endDate: '3/9/2003' }, { courseID: '456', endDate: '3/9/2003' } ]; var index = findBy(courses, {courseID:"123", endDate:"3/9/2003"} ); if(index!==false){ courses.splice(index,1); } console.log(courses); |