2012-07-13 13 views
7

मैं सोच रहा था कि जावास्क्रिप्ट में एक सूची समझ को बदलने के लिए सबसे आसान तरीका (पायथन से) क्या होगा। क्या ऐसी कोई चीज है जो इसे पठनीय और गड़बड़ नहीं करेगी?जावास्क्रिप्ट में ऐरे समझ?

non_zero_in_square = [ grid[row][col] 
          for row in range(start_row, start_row+3) 
          for col in range(start_col, start_col+3) 
          if grid[row][col] is not 0 
         ] 

यह एक सूची समझ के काफी एक अच्छा उदाहरण है के रूप में यह कई for रों है और और एक if

मैं जोड़ने चाहिए कि range बिट here कवर किया जाता है (मैं range के बिना नहीं रह सकते हैं)।

+3

एक जावास्क्रिप्ट डेवलपर हैं जो अजगर पता नहीं अगर यह बस स्टॉप पर एक चैट के लिए आया था के रूप में, कि कुछ अजीब गधा वाक्य रचना आप Pythonistas वहाँ मिल गया है है। – Utkanos

+2

ध्यान दें कि जावास्क्रिप्ट 1.7 में [ऐरे समझ] है [https://developer.mozilla.org/en/New_in_JavaScript_1.7#Array_comprehensions_%28Merge_into_Array_comprehensions%29), दुर्भाग्य से इस समय केवल फ़ायरफ़ॉक्स में लागू किया गया है। मुझे उम्मीद है कि हम जल्द ही अन्य ब्राउज़रों में भी मिलेंगे (देखें [सद्भावना] (http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions) – ZER0

उत्तर

3

वैसे यह .map() विधि के साथ ऐसा करने के लिए कुछ हद तक गड़बड़ होगा, क्योंकि बाहरी कॉलों को वास्तव में सरणी वापस करने की आवश्यकता होती है। इस प्रकार आप शायद पैदल यात्री के साथ सबसे अच्छे हैं:

var nonZero = []; 
for (var row = startRow; row < startRow + 3; ++row) 
    for (var col = startCol; col < startCol + 3; ++col) 
    if (grid[row][col] !== 0) nonZero.push(grid[row][col]; 
+0

दाएं। इसके अलावा मैं इसे एक स्व-निष्पादन में संलग्न करूंगा 'nonZero' – elclanrs

+1

@elclanrs की रक्षा के लिए चर को आवंटित फ़ंक्शन हां मैं सहमत हूं; यह ओपी के समान कुछ प्रकार का दायरा मानता है, लेकिन यदि यह किसी प्रकार का टूल था तो' nonZero' स्थानीय चर होना चाहिए। – Pointy

2

कॉफी स्क्रिप्ट समर्थन सूची समझ वाक्यविन्यास और शायद यह सबसे सुन्दर है क्योंकि यह सिंटैक्स का पालन करता है। दुर्भाग्य से यह एक मध्यस्थ है और बहु ​​लाइन जावास्क्रिप्ट

http://coffeescript.org/#loops

वे आपको बताएंगे कि कैसे यह जावास्क्रिप्ट में वैनिला के coverts को संकलित किया जाएगा।

1

Mozilla JS Documentation, ES 1.7 supports them natively

उदाहरण:

var numbers = [1, 2, 3, 4]; 
var doubled = [i * 2 for (i of numbers)]; 
+0

आपने ' फ़ायरफ़ॉक्स को छोड़कर लोकप्रिय ब्राउज़रों में आज कोई समर्थन नहीं मिला: http://kangax.github.io/compat-table/es6/। –

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