2013-08-16 10 views
22

मैं निम्नलिखित जावास्क्रिप्ट ऑब्जेक्ट से कोर्स आईडी और एंडडेट दोनों के आधार पर एक आइटम कैसे हटा सकता हूं?किसी जावास्क्रिप्ट ऑब्जेक्ट से एक ऑब्जेक्ट निकालें

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

यह कोई ऑब्जेक्ट नहीं है, यह ऑब्जेक्ट्स का "सरणी" है। – mavili

+0

'विंडो। MyCheckedCourses' एक सरणी है, एक jQuery ऑब्जेक्ट नहीं। –

+4

jQuery कहां है? –

उत्तर

13

इटरेशन एक जरूरी है। संबंधित आइटम को हटाने के लिए आपको .splice() का उपयोग करना होगा और लूप के लिए 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; 
    } 
} 

आप एक फ़ंक्शन कर सकते हैं और इस तरह के पैरामीटर के साथ इसका उपयोग कर सकते हैं; बाद

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

संपादित इयान के comment:

मुझे लगता है कि अपने संग्रह अद्वितीय आइटम नहीं हैं। यदि आपको सभी वस्तुओं के माध्यम से पुन: प्रयास करना नहीं है और आपको इसे पीछे की ओर करना है क्योंकि यदि आप सरणी से तत्व हटाते हैं तो यह सूचकांक बदल जाएगा और पुनरावृत्ति सही ढंग से काम नहीं करेगी। तो यह फ़ंक्शन एक और अधिक सुरक्षित संस्करण है;

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' मुझे" अद्वितीय "के बारे में सोचता है (और मुझे पता है कि शीर्षक" एकल वस्तु "कहता है, लेकिन वह कई जगहों पर "एकल ऑब्जेक्ट" का अर्थ हो सकता है), यदि संभवतः कई मैचों हैं, तो आपको (ब्रेक; 'और) लूप को पीछे हटाना होगा – Ian

+1

आप सही हैं Ian, मैं अपना जवाब अपडेट करने जा रहा हूं । –

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); 
संबंधित मुद्दे