2009-11-18 7 views
20

मैं जावास्क्रिप्ट की एक सरणी के साथ काम कर रहा हूँ जैसे ऑब्जेक्ट्स:जावास्क्रिप्ट की सरणी के साथ jQuery inArray का उपयोग करते हुए ऑब्जेक्ट्स

var IssuesArray = [{"ID" : "1", "Name" : "Issue1"}, 
        {"ID" : "2", "Name" : "Issue2"}, 
        {"ID" : "3", "Name" : "Issue3"}]; 

मेरे अंत प्रयास सरणी से एक वस्तु को निकालने के लिए जब मैं की आईडी पता कोशिश कर रहा है वस्तु। तो यह पता चलता है कि मैं jQuery ग्रेप उपयोग करने के लिए सूचकांक (i) है, जो मैं का उपयोग करके प्राप्त करने का प्रयास कर रहा हूँ से एक तत्व हटाने की कोशिश कर रहा हूँ

$.grep(IssuesArray, function(n, i) { 
    return i != $.inArray("2", IssuesArray); 
}); 

: मैं कोड कुछ इस तरह है कि उपयोग करने के लिए कोशिश कर रहा हूँ jQuery में ऐरे। निस्संदेह उपरोक्त कोड काम नहीं करेगा क्योंकि "2" सरणी में किसी आइटम से मेल खाना चाहिए, जो सभी जावास्क्रिप्ट ऑब्जेक्ट्स हैं (एक ऑब्जेक्ट कभी बराबर नहीं होगा "2)। मैं की तरह कुछ की जरूरत है:

$.inArray(javascriptObject.Name=="2", IssuesArray); 

क्या कभी किसी ने inArray का उपयोग कर जावास्क्रिप्ट वस्तुओं की अनुक्रमित पाने के लिए, उस वस्तु के भीतर एक क्षेत्र मूल्य का उपयोग कर किसी भी सफलता मिली है? किसी भी सहायता की सराहना की जाएगी। धन्यवाद।

अद्यतन/वर्गीकरण: मेरे प्रश्न से कुछ लोग उलझन में हैं, लेकिन मुझे एक ऐसा उत्तर मिला जो फिर भी काम करता है। मैं उपयोग कर रहा हूं:

IssuesArray = $.grep(IssuesArray, function(n) { 
    return n.ID != "2"; 
}); 

मुझे लगता है कि मैं इसके बारे में बहुत गहरी सोच रहा था, जब समाधान वास्तव में बहुत आसान था। मैं बस एक सरणी से एक जावास्क्रिप्ट ऑब्जेक्ट को हटाना चाहता था, जब तक कि मैं उस वस्तु में किसी विशेष संपत्ति के मूल्य को जानता था। उपर्युक्त समाधान किसी भी ऑब्जेक्ट को छोड़कर सरणी से सबकुछ वापस करने के लिए jQuery के grep का उपयोग करता है जिसका आईडी == "2"। हमेशा की तरह, त्वरित उत्तरों के लिए धन्यवाद। कुछ जवाब अच्छे समाधान थे और उदाहरण के लिए "splice" का उपयोग करके काम करना चाहते थे, लेकिन यह समाधान सबसे सरल सबसे सरल लगता है। एक बार फिर धन्यवाद।

+0

मैं पता नहीं कि आप क्या हासिल करने की कोशिश कर रहे हैं ... – Greg

+0

बिल्कुल .grep विधि नहीं पता था - यह बहुत अच्छा छोटे सरणियों के लिए, है (Btw, कारण है कि यह कहा जाता है ग्रेप?); यह सरणी को डुप्लिकेट करता है, हालांकि, बड़े डेटासेट के लिए, मूल सरणी से तत्वों को निकालना बेहतर हो सकता है, लेकिन यह उस पर निर्भर करता है कि आप क्या हासिल करने की कोशिश कर रहे हैं :) – Patonza

उत्तर

33

n अपने सूची आइटम है, इसलिए कुछ इस तरह काम करना चाहिए: jQuery का उपयोग किए बिना

$.grep(issuesArray, function(n) { return n.ID != "2"; }) 
+0

ऐसा लगता है कि मुझे क्या करना है। धन्यवाद! –

+1

मई सख्त तुलना का भी उपयोग कर सकते हैं,! == इसके बजाय! = –

6

सुनिश्चित नहीं हैं कि अगर मैं अपने सवाल का सही ढंग से समझ, लेकिन मैं करना होगा:

$.each(IssuesArray, function(i, item){ 
    if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1); 
}); 
+0

+1 बहुत ही सुरुचिपूर्ण समाधान। –

0

या अन्य व्यवस्थाएं:

var newArray = []; 
var i=0, len=IssuesArray.length; 
var bad_id = "2"; // or whatever 
while(i<len) { 
    if(IssuesArray[i].ID !== bad_id) { 
    newArray.push(IssuesArray[i++]); 
    } 
} 
0

सरल ??

var IssuesArray = { 
    1: "Issue1", 
    2: "Issue2", 
    3: "Issue3" 
}; 
var issue2 = IssuesArray[2]; 

एक हैश होने पर हैश की एक सूची क्यों है?

+0

मेरे प्रश्न में बहुत अधिक जानकारी नहीं लेना चाहता था, लेकिन मेरे पास सिर्फ नाम और आईडी की तुलना में "समस्या" में अधिक डेटा है। कुल 5 फ़ील्ड हैं, इसलिए एक हैश अपर्याप्त होगा। हालांकि विचार के लिए धन्यवाद। –

2
var spliceID = function(id, arr) { 
    $(arr).each(function(i, el) { 
     if (el.ID == id) { 
      arr.splice(i,1); 
      return false; 
     } 
    }); 
    return arr; 
} 

console.log(spliceID('2', IssuesArray)); 
संबंधित मुद्दे