2012-04-13 13 views
9

मैं मूल रूप से Underscore.js में _.each() या _.map() का उपयोग करके निम्न व्यवहार व्यक्त करना चाहता हूं।क्या अंडरस्कोर.जेएस में एक ही समय में दो सूचियों के माध्यम से फिर से शुरू करना संभव है?

a = [1, 2, 3] 
b = [3, 2, 1] 

# Result list 
c = [0, 0, 0] 

for i in [0 .. a.length - 1] 
    c[i] = a[i] + b[i] 

यह मैटलैब (अपनी प्राथमिक भाषा) जैसे में निश्चित रूप से संभव है:

c = arrayfun(@(x,y) x+y, a, b) 

Intuitively, यह अंडरस्कोर में वाक्य रचना की तरह लगता है होना चाहिए:

c = _.map(a, b, function(x, y){ return x + y;}) 

हालांकि, उस तर्क सूची स्वीकार्य नहीं है; दूसरा पैरामीटर एक कॉल करने योग्य फ़ंक्शन माना जाता है।

वैकल्पिक "संदर्भ" तर्क इस स्थिति में मेरी सहायता नहीं करेगा।

उत्तर

14

उस के लिए zip (underscore.js से भी) का उपयोग करें। कुछ इस तरह:

var a = [1, 2, 3]; 
var b = [4, 5, 6]; 
var zipped = _.zip(a, b); 
// This gives you: 
// zipped = [[1, 4], [2, 5], [3, 6]] 

var c = _.map(zipped, function(pair) { 
    var first = pair[0]; 
    var second = pair[1]; 
    return first + second; 
}); 

// This gives you: 
// c = [5, 7, 9] 

कार्य उदाहरण:

+1

धन्यवाद एक टन! वह वास्तव में सहायक था। – mrjoelkemp

+0

निश्चित बात, मदद करने में खुशी हुई! –

+0

@ icyrock.com जब मैं ** स्ट्रिंग्स के साथ सरणी 'ए' और 'बी' में मानों को प्रतिस्थापित करता हूं ** अंडरस्कोर का' _.zip' फ़ंक्शन मान के बजाय ** सरणी ** की लंबाई संग्रहीत करता है। क्या आप इसकी पुष्टि कर सकते हैं? आप एक ही परिदृश्य को कैसे कार्यान्वित करेंगे लेकिन इंटीग्रर्स के बजाय स्ट्रिंग्स के साथ? – JJD

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