从Javascript对象中删除单个对象
这个问题在这里已经有了答案:
迭代是必须的。 您必须使用.splice()
来删除相应的项目并break
for循环。
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;
}
}
你可以创建一个函数,并像这样使用它。
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');
在伊恩评论后编辑:
我假设你的收藏有独特的物品。 如果没有,你必须遍历所有项目,你必须向后做,因为如果你从数组中删除一个元素,它的索引将会改变,迭代将无法正常工作。 所以这个函数是一个更安全的版本。
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从数组中删除一个元素: MyCheckedCourses.splice(index,length);
一个例子:
MyCheckedCourses=[0,1,2,3];
MyCheckedCourses.splice(1,1);
MyCheckedCourses
现在是: [0, 1, 3]
MyCheckedCourses
[0, 1, 3]
要根据您可以使用的键值找到索引:
// 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);
链接地址: http://www.djcxy.com/p/19013.html