2013-08-16 47 views
22

Làm cách nào để xóa một mục dựa trên cả khóa họcID và endDate từ đối tượng javascript sau?Xóa một đối tượng đơn lẻ khỏi đối tượng Javascript

window.MyCheckedCourses = [ 
     { courseID: '123', endDate: '6/7/2010' }, 
     { courseID: '123', endDate: '3/9/2003' }, 
     { courseID: '456', endDate: '3/9/2003' } 
    ]; 
+5

không phải là đối tượng, đó là một "mảng" của các đối tượng. – mavili

+0

'window.MyCheckedCourses' là một mảng chứ không phải đối tượng jQuery. –

+4

jQuery ở đâu? –

Trả lời

13

Lặp lại là điều bắt buộc. Bạn phải sử dụng .splice() để xóa mục tương ứng và break vòng lặp 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; 
    } 
} 

Bạn có thể tạo hàm và sử dụng nó với các tham số như thế này;

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

Chỉnh sửa sau khi Ian của comment:

tôi cho rằng bộ sưu tập của bạn có các mục độc đáo. Nếu bạn không phải lặp qua tất cả các mục và bạn phải làm ngược lại vì nếu bạn loại bỏ một phần tử khỏi mảng thì chỉ mục của nó sẽ thay đổi và lặp lại sẽ không hoạt động chính xác. Vì vậy, chức năng này là một phiên bản an toàn hơn nhiều;

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'); 
+1

Mặc dù 'id' khiến tôi nghĩ về" duy nhất "(và tôi biết tiêu đề nói" đối tượng đơn lẻ ", nhưng có thể có nghĩa là một "đối tượng duy nhất" ở một số nơi), nếu có thể có nhiều kết quả phù hợp, bạn sẽ phải xóa bỏ vòng lặp 'break;' và) ngược lại – Ian

+1

Bạn đang nói đúng Ian, tôi sẽ cập nhật câu trả lời của mình . –

1

Bạn có thể xóa một phần tử từ một mảng sử dụng mối nối: MyCheckedCourses.splice(index,length);

Một ví dụ:

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

MyCheckedCourses bây giờ là: [0, 1, 3]

Để tìm chỉ số dựa trên các giá trị quan trọng bạn có thể sử dụng:

// 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); 
Các vấn đề liên quan