2013-08-16 5 views
22

次のJavaScriptオブジェクトからcourseIDとendDateの両方に基づいて1つのアイテムを削除するにはどうすればよいですか?Javascriptオブジェクトから単一のオブジェクトを削除する

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

これはオブジェクトではなく、オブジェクトの「配列」です。 – mavili

+0

'window.MyCheckedCourses'は配列であり、jQueryオブジェクトではありません。 –

+4

jQueryはどこですか? –

答えて

13

反復は必須です。対応するアイテムを削除するには.splice()を、forループにはbreakを使用する必要があります。

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

関数を作成し、このようなパラメータで使用できます。イアンさんcomment

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

'id'は私に"ユニーク "と思いますが(タイトルには"単一のオブジェクト "がありますが、複数のマッチが可能な場合、 'break;'と ')ループを後ろに取り除く必要があります – Ian

+1

あなたは正しいですイアン、私は答えを更新するつもりです。 –

1

あなたはスプライスを使用して配列から要素を削除することができます。MyCheckedCourses.splice(index,length);

例:

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

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); 
関連する問題