2010-11-29 22 views
6

मैं जावास्क्रिप्ट में किसी सरणी से प्रत्येक दूसरे और तीसरे तत्व को हटाना चाहता हूं।जावास्क्रिप्ट में किसी सरणी से प्रत्येक दूसरे और तीसरे तत्व को कैसे हटाएं?

मेरे सरणी इस तरह दिखता है:

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10"]; 

अब मैं हर दूसरे और तीसरे तत्व हटाना चाहते हैं। परिणाम इस प्रकार दिखाई देगा:

["Banana", "Orange", "Apple"] 

मैं एक के लिए लूप और जोड़ का उपयोग करने की कोशिश की:

for (var i = 0; fruits.length; i = i+3) { 
    fruits.splice(i+1,0); 
    fruits.splice(i+2,0); 
}; 

बेशक यह एक खाली सरणी देता है क्योंकि तत्व निकाल दिए जाते हैं, जबकि पाश अभी भी निष्पादित किया जाता है । मैं इसे सही तरीके से कैसे कर सकता हूं?

धन्यवाद।

+0

कोई बात बिगड़ की एक जोड़ी नहीं है, विशेष रूप से कि यह 'जबकि (फल) 'चलाने के बराबर है, जो फल के मूल्यांकन के लिए तब तक चलता रहेगा सच है, सिर्फ एक बार सरणी के माध्यम से जाने के बजाय। – Yahel

उत्तर

12

आप एक अलग कोण से इस दृष्टिकोण सकता है चाहता हूँ उलटे क्रम में सरणी के माध्यम से पाशन और push() मूल्य यदि आप किसी अन्य सरणी में नष्ट कर दिया नहीं करना चाहते:

var firstFruits = [] 

for (var i = 0; i < fruits.length; i = i+3) { 
    firstFruits.push(fruits[i]); 
}; 

यह दृष्टिकोण splice() का उपयोग कर के रूप में के रूप में संक्षिप्त नहीं हो सकता है, लेकिन मैं आपको पठनीयता के संदर्भ में लाभ को देखने के बारे में सोचो।

+0

मैं दूसरे से पहले पसंद करूंगा, क्योंकि दूसरा '["केला", "", "", "ऑरेंज", "", "", "ऐप्पल", " – Robert

+0

@Robert जैसे सरणी का उत्पादन करेगा, आप बिल्कुल सही कह रहे है। मुझे यकीन है कि ओपी इच्छाओं की कार्यक्षमता नहीं है। धन्यवाद, मैं केवल पहली बार शामिल करने के लिए अपनी प्रतिक्रिया अपडेट करूंगा। – McStretch

+0

वाह, यह आसान है। आपका बहुत बहुत धन्यवाद। :-) – Bob

0

क्या आपने पहले, चौथे और सातवें तत्वों को एक नई सरणी में कॉपी करने पर विचार किया है? यह बहुत मेमोरी कुशल नहीं है लेकिन यह अभी भी ठीक काम करेगा।

0

आप पीछे की ओर सरणी के माध्यम से स्थानांतरित करने के लिए, तो अगर i % 2 == 0 || i%3 == 0 तो सरणी से तत्व ब्याह

9

यह मेरे लिए काम करता है।

var filtered = [ 
    "Banana", 
    "yellow", 
    "23", 
    "Orange", 
    "orange", 
    "12", 
    "Apple", 
    "green", 
    "10" 
].filter(function(_, i) { 
    return i % 3 === 0; 
}) 

रिटर्न: http://jsfiddle.net/RaRR7/

+0

यह भी वास्तव में एक अच्छा विचार है, धन्यवाद। – Bob

1

आप फिल्टर इस्तेमाल कर सकते हैं:

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10","Pear","something","else"]; 

for(var i = 0; i < fruits.length; i++) { 
    fruits.splice(i+1,2); 
} 

//fruits = Banana,Orange,Apple,Pear 

यहाँ एक डेमो दिखाता है कि वह एक छोटे से बेहतर है

["Banana", "Orange", "Apple"] 
+0

मुझे फ़िल्टर का उपयोग करके इस दृष्टिकोण को पसंद है। लेकिन '(i + 1)% 3 नहीं है! = 0 && (i + 1)% 2! = 0' इस मामले में' i% 3 === 0' जैसा ही है? मुझे लगता है कि उत्तरार्द्ध बहुत आसान है। – modulitos

+0

हाँ, यह सच है। मैं अपडेट करूंगा। –