2011-08-30 10 views
13
var arr = [4, 5, 7, 8, 14, 45, 76]; 

function even(a) { 
    var ar = []; 

    for (var i = 0; i < a.length; i++) { 
    ar.push(a[2 * i + 1]); 
    } 

    return ar; 
} 

alert(even(arr)); 

http://jsbin.com/unocar/2/editमैं ऐरे के तत्वों को कैसे निकालूं?

मैं उत्पादन भी (इंडेक्स) एक सरणी के तत्वों के लिए इस कोड की कोशिश की है। यह काम करता है, लेकिन यह कुछ खाली तत्व भी आउटपुट करता है। मैं केवल मौजूदा तत्वों को आउटपुट करने के लिए इस कोड को कैसे ठीक करूं?

उत्तर

14

या तो उपयोग मापांक:

for (var i = 0; i < a.length; i++) { 
    if(i % 2 === 0) { // index is even 
     ar.push(a[i]); 
    } 
} 

या i तदनुसार incrementing द्वारा हर दूसरे तत्व को छोड़:

for(var i = 0; i < a.length; i += 2) { // take every second element 
    ar.push(a[i]); 
} 

नोटिस: आपका कोड वास्तव में सरणी से अजीब सूचकांक तत्वों लेता है । यदि यह तुम क्या चाहते है आप i % 2 === 1 का उपयोग करें या क्रमशः var i = 1 साथ पाश शुरू कर दिया है।

+0

शायद, मैंने गलत तरीके से कहा। मैं instance- 5 के लिए तत्व की क्रमसूचक संख्या का मतलब दूसरे स्थान पर है, 8 चौथा है .. और इतने पर .. – DrStrangeLove

+0

मैं देख रहा हूँ ... तो यह अगर तुम अजीब अनुक्रमित ले काम करना चाहिए। –

+0

दूसरे तत्व से शुरू करने के लिए: (var i = 1; – DruDro

2

आप% ऑपरेटर के साथ क्यों की कोशिश नहीं करते। यह आपको एक विभाजन के शेष देता है।

if ((i % 2) === 0) { 
    ar.push(a[i]) 
} 
0

साथ पाश ब्लॉक की जगह आप इस तरह एकरूपता के लिए तत्वों का परीक्षण करने की जरूरत है:

var arr = [4,5,7,8,14,45,76]; 

function even(a){ 
    var ar = []; 

    for (var i=0; i<a.length;i++){ 
    if (a[i] % 2 === 0) 
    { 
     ar.push(a[i]); 
    } 

    } 

return ar; 
} 

alert(even(arr)); 

% 2, सापेक्ष ऑपरेटर है यह पूर्णांक विभाजन के शेष देता है।

+0

गलत प्रश्न का उत्तर दिया, – jkebinger

0
var arr = [4,5,7,8,14,45,76]; 

function even(a) 
{ 
    var ar = []; 

    for (x in a) 
    { 

    if((a[x]%2)==0) 
    ar.push(a[x]); 

    } 
return ar; 
} 

alert(even(arr)); 
+1

के बारे में खेद है, यह 'के लिए ...' का उपयोग करके सरणी पर पुनरावृत्ति करने के लिए निराश है। Https: // developer देखें। mozilla.org/en/JavaScript/Reference/Statements/for...in –

+0

@Felix Kling: माफ करना .. मैं इस बात का पता नहीं था .. :) लिंक – mithunsatheesh

+0

कोई समस्या नहीं है के लिए धन्यवाद और आपका स्वागत है :) –

9

IE9 + का उपयोग करें Array.filter

var arr = [4,5,7,8,14,45,76]; 
var filtered = arr.filter(function(element, index, array) { 
    return (index % 2 === 0); 
}); 

पुराने आईईएस के लिए एक वापस आने के साथ, सभी अन्य ब्राउज़रों इस फ़ॉलबैक

if (!Array.prototype.filter) 
{ 
    Array.prototype.filter = function(fun /*, thisp */) 
    { 
    "use strict"; 

    if (this === void 0 || this === null) 
     throw new TypeError(); 

    var t = Object(this); 
    var len = t.length >>> 0; 
    if (typeof fun !== "function") 
     throw new TypeError(); 

    var res = []; 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) 
    { 
     if (i in t) 
     { 
     var val = t[i]; // in case fun mutates this 
     if (fun.call(thisp, val, i, t)) 
      res.push(val); 
     } 
    } 

    return res; 
    }; 
} 
0

मैं सिर्फ समझाने के लिए क्यों अपने परिणाम है चाहता था बिना ठीक हैं आप सभी की उम्मीद नहीं है क्योंकि हर कोई उत्कृष्ट समाधान दिखाता है। आप एक सरणी आकार से अधिक पुनरावृत्ति कर रहे हैं एन तो अपने जिसके परिणामस्वरूप सरणी एक सरणी है कि आकार एन का परिणाम देगा के बाद से ही एन/2 मूल सरणी में पाया जाएगा अपने जिसके परिणामस्वरूप सरणी रिक्त स्थान को भरने के लिए के साथ आराम से भर देगा में तत्वों धक्का करने का प्रयास करेंगे एन के बाकी हिस्सों में तो अगर आप देखने के लिए अगर एक [2 * मैं] मौजूद है या अगर एक [i]% 2 == 0 सम्मिलित करने से पहले, अपने जिसके परिणामस्वरूप सरणी केवल भी अनुक्रमित मूल्यों में शामिल होंगे देखने के लिए जाँच की जाँच की

3

यह eltuza उत्तर जोड़ देगा:

[1,2,3,4,5].filter(function(num){ if(num % 2) return num;}) 
+0

यह जवाब वास्तव में सवाल का जवाब नहीं देता है। – A1rPun

संबंधित मुद्दे