从javascript对象中删除单个对象

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' }  
    ];


迭代是必须的。您必须使用.splice()删除相应的项,并使用break删除for循环。

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:MyCheckedCourses.splice(index,length);从数组中删除元素。

一个例子:

1
2
MyCheckedCourses=[0,1,2,3];
MyCheckedCourses.splice(1,1);

MyCheckedCourses现在是:[0, 1, 3]

要根据键值查找索引,可以使用:

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);