2017-06-17 8 views
5

मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो केवल नेस्टेड सरणी से भी संख्याओं को प्रिंट करता है। मेरा प्रयास यहां है और यह "अपरिभाषित" लौटता रहता है।जावास्क्रिप्ट नेस्टेड ऐरे रिटर्न भी संख्या

function printEvents(){ 

var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]]; 

    for (var i = 0; i<nestedArr.length; i++) { 
    for (var j = 0; j<nestedArr[i]; j++) { 
     var evenNumbers = nestedArr[i][j] 
    } 
    } 

    if (evenNumbers % 2 == 0) { 
    console.log(evenNumbers) 
    } 

} 

printEvents(); 
+0

सभी 'j के प्रथम wostex

उत्तर

2

आपके पास कुछ समस्याएं हैं। आपको अपने घोंसले वाले सरणी की लंबाई की जांच करने की आवश्यकता है और आपको अपना कोड स्थानांतरित करने की आवश्यकता है जो जांचता है कि कोई संख्या सरणी के अंदर भी है या नहीं।

var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]]; 
 

 
    for (var i = 0; i<nestedArr.length; i++) { 
 
    for (var j = 0; j<nestedArr[i].length; j++) { 
 
     var evenNumbers = nestedArr[i][j] 
 
     if (evenNumbers % 2 == 0) { 
 
     console.log(evenNumbers) 
 
     } 
 
    } 
 
    }

1

आप इस अधिक आसान filter का उपयोग कर विधि है जो एक callback विधि स्वीकार करता है क्या कर सकते हैं।

var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]]; 
 
var mergedArray=[].concat.apply([], nestedArr); 
 
console.log(mergedArray.filter(a=>a%2==0));

+0

धन्यवाद! यह वास्तव में दिलचस्प है क्योंकि यह एक सरणी प्रिंट करता है। मैं सोच रहा था कि अगर इसे प्रत्येक मूल्य को मुद्रित करने की आवश्यकता है तो उससे कैसे संपर्क करें? – huisleona

3

आप एक पुनरावर्ती दृष्टिकोण इस्तेमाल कर सकते हैं यदि आइटम एक सरणी है। आपको for लूप के अंदर समानता के लिए परीक्षण को स्थानांतरित करने की आवश्यकता है।

function printEvents(array) { 
 
    var i; 
 
    for (i = 0; i < array.length; i++) { 
 
     if (Array.isArray(array[i])) { 
 
      printEvents(array[i]); 
 
      continue; 
 
     } 
 
     if (array[i] % 2 == 0) { 
 
      console.log(array[i]); 
 
     } 
 
    } 
 
} 
 

 
printEvents([[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 11, 12], [[[13, [14]]]]]);
एक कॉलबैक

function getEven(a) { 
 
    if (Array.isArray(a)) { 
 
     a.forEach(getEven); 
 
     return; 
 
    } 
 
    if (a % 2 == 0) { 
 
     console.log(a); 
 
    } 
 
} 
 

 
getEven([[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 11, 12], [[[13, [14]]]]]);

0

तुम कुछ जल्दी के लिए हर के साथ कम करने का उपयोग कर सकते के साथ

समाधान।

var nestedArr = [ [1, 2, 3],[4, 5, 6],[7, 8],[9, 10, 11, 12]]; 
 

 
var sift = nestedArr.reduce(function(r,o) { 
 
    o.every(i => i % 2 === 0 ? r.push(i) : true) 
 
    return r; 
 
}, []); 
 

 
console.log(sift);

आप एक लाइनर आप फ़िल्टर

var nestedArr = [[1, 2, 3],[4, 5, 6],[7, 8],[9, 10, 11, 12]]; 
 

 
var sift = nestedArr.reduceRight((p, b) => p.concat(b).filter(x => x % 2 === 0), []); 
 

 
console.log(sift)

+0

पहले मामले में बंद (कुछ भी नहीं) क्यों? –

+0

@NinaScholz मेरा बुरा :) तय – Rick

+0

@NinaScholz कृपया मुझे बताएं अगर आपको कुछ भी ठीक या सुधार किया जा सकता है, तो कुछ भी। आप से सभी सलाह सोने है – Rick

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