संख्याओं की एक स्ट्रिंग को संख्याओं की एक सरणी में कैसे परिवर्तित करें?


187

मैं नीचे स्ट्रिंग है -

var a = "1,2,3,4";

जब मैं करता हूं -

var b = a.split(',');

मुझे मिलता bहै["1", "2", "3", "4"]

मैं पाने के लिए कुछ कर सकते हैं bके रूप में [1, 2, 3, 4]?

जवाबों:


25

गोल्फरों के लिए मेरे 2 सेंट:

b="1,2,3,4".split`,`.map(x=>+x)

बैकक्वॉट स्ट्रिंग लिटिरल है इसलिए हम कोष्ठक (विभाजन कार्य की प्रकृति के कारण) को छोड़ सकते हैं लेकिन यह बराबर है split(',')। स्ट्रिंग अब एक सरणी है, हमें बस स्ट्रिंग के पूर्णांक को वापस करने वाले फ़ंक्शन के साथ प्रत्येक मान को मैप करना होगा x=>+x(जो कि Numberफ़ंक्शन से भी कम है (6 के बजाय 5 चार्ट)) के बराबर है:

function(x){return parseInt(x,10)}// version from techfoobar
(x)=>{return parseInt(x)}         // lambda are shorter and parseInt default is 10
(x)=>{return +x}                  // diff. with parseInt in SO but + is better in this case
x=>+x                             // no multiple args, just 1 function call

मुझे उम्मीद है कि यह थोड़ा और स्पष्ट है।


यह इस तरह क्यों काम करता है? गैर-सुरुचिपूर्ण लगता है क्योंकि यह बहुत सार है।
क्रिश्चियन मैथ्यू

हम इस बात की परवाह क्यों करेंगे कि मानचित्र फ़ंक्शन कितने चार्ट का उपयोग करता है?
SafeFastExpressive

विषम, कोणीय 7 में कोष्ठक की आवश्यकता होती है।
जेम्स लोफॉर्टी

@SafeFastExpressive क्योंकि यह "गोल्फर्स" के लिए एक संस्करण है, अगर आप नहीं जानते कि मैं किस बारे में बात कर रहा हूं: codegolf.stackexchange.com
ट्रैपिआई

407

आप Array.mapप्रत्येक तत्व को संख्या में बदलने के लिए उपयोग कर सकते हैं ।

var a = "1,2,3,4";

var b = a.split(',').map(function(item) {
    return parseInt(item, 10);
});

डॉक्स की जाँच करें


या अधिक सुरुचिपूर्ण ढंग से उपयोगकर्ता द्वारा इंगित किया गया: thg435

var b = a.split(',').map(Number);

Number()बाकी काम कहां होगा: यहां देखें


नोट: पुराने ब्राउज़रों के लिए जो समर्थन नहीं करते हैं map, आप अपने आप को एक कार्यान्वयन जोड़ सकते हैं जैसे:

Array.prototype.map = Array.prototype.map || function(_x) {
    for(var o=[], i=0; i<this.length; i++) { 
        o[i] = _x(this[i]); 
    }
    return o;
};

2
"ट्रिकी उपयोग के मामले" दस्तावेज में वास्तव में इस विषय के बारे में बात करती है।
एंटनी

87
या बस map(Number)
जॉर्ज

नोट: सुनिश्चित करें कि आप उस लिंक में ब्राउज़र संस्करण की जांच करते हैं, IE8 Array.map का समर्थन नहीं करता है। (हैरानी की बात है, एह)
जो Zack

1
वर्थ नोटिंग नम्बर () पूर्णांक को बल नहीं देगा, केवल संख्या। यदि आपको विशेष रूप से किट्स को डालना है, तो parseInt () का उपयोग करें। "1.1,2,3".split(",").map(Number)है [1.1, 2, 3]जबकि "1.1,2,3".split(",").map(item => parseInt(item, 10))है[1, 2, 3]
dtbarne

1
@ शचीथ - पार्सइंट () का दूसरा तर्क आधार है। इस मामले में 10. Ref: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Techfoobar

18

इसे पूर्णांक पर मैप करें:

a.split(',').map(function(i){
    return parseInt(i, 10);
})

mapहर ऐरर आइटम को देखता है, इसे दिए गए फंक्शन में पास करता है और एरे को उस फंक्शन के रिटर्न मान के साथ देता है। mapपुराने ब्राउज़रों में उपलब्ध नहीं है, लेकिन jQuery या अंडरस्कोर जैसे अधिकांश पुस्तकालयों में क्रॉस-ब्राउज़र संस्करण शामिल है।

या, यदि आप लूप पसंद करते हैं:

var res = a.split(",");
for (var i=0; i<res.length; i++)
{
    res[i] = parseInt(res[i], 10);
}

15

+stringस्ट्रिंग को संख्या में बदलने का प्रयास करेगा। फिर Array.mapप्रत्येक तत्व को बदलने के लिए फ़ंक्शन का उपयोग करें ।

"1,2,3,4".split(',').map(function(el){ return +el;});

12

विवरण के लिए Array.from () MDN पर जाएं

var a = "1,2,3,4";
var b = Array.from(a.split(','),Number);

b एक संख्या है


2
यह मुझे मिला सबसे सीधा तरीका है !!
FonzTech



3

एक संस्करण के रूप में आप लॉजिश लाइब्रेरी से जुडाव_.map और _.aryतरीकों का उपयोग कर सकते हैं । संपूर्ण परिवर्तन अधिक कॉम्पैक्ट होगा। यहाँ आधिकारिक दस्तावेज से उदाहरण दिया गया है :

_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]

3

लैम्ब्डा और / या का उपयोग करने के लिए radixपैरामीटर देने की कोई आवश्यकता नहीं है parseInt, बस उपयोग करें parseFloatया Numberइसके बजाय।

कारण:

  1. यह काम कर रहा है:

    var src = "1,2,5,4,3";
    var ids = src.split(',').map(parseFloat); // [1, 2, 5, 4, 3]
    
    var obj = {1: ..., 3: ..., 4: ..., 7: ...};
    var keys= Object.keys(obj); // ["1", "3", "4", "7"]
    var ids = keys.map(parseFloat); // [1, 3, 4, 7]
    
    var arr = ["1", 5, "7", 11];
    var ints= arr.map(parseFloat); // [1, 5, 7, 11]
    ints[1] === "5" // false
    ints[1] === 5   // true
    ints[2] === "7" // false
    ints[2] === 7   // true
  2. यह छोटा है।

  3. यह एक छोटा सा तेज है और कैश का फायदा उठाता है, जब parseInt-approach - नहीं :

      // execution time measure function
      // keep it simple, yeah?
    > var f = (function (arr, c, n, m) {
          var i,t,m,s=n();
          for(i=0;i++<c;)t=arr.map(m);
          return n()-s
      }).bind(null, "2,4,6,8,0,9,7,5,3,1".split(','), 1000000, Date.now);
    
    > f(Number) // first launch, just warming-up cache
    > 3971 // nice =)
    
    > f(Number)
    > 3964 // still the same
    
    > f(function(e){return+e})
    > 5132 // yup, just little bit slower
    
    > f(function(e){return+e})
    > 5112 // second run... and ok.
    
    > f(parseFloat)
    > 3727 // little bit quicker than .map(Number)
    
    > f(parseFloat)
    > 3737 // all ok
    
    > f(function(e){return parseInt(e,10)})
    > 21852 // awww, how adorable...
    
    > f(function(e){return parseInt(e)})
    > 22928 // maybe, without '10'?.. nope.
    
    > f(function(e){return parseInt(e)})
    > 22769 // second run... and nothing changes.
    
    > f(Number)
    > 3873 // and again
    > f(parseFloat)
    > 3583 // and again
    > f(function(e){return+e})
    > 4967 // and again
    
    > f(function(e){return parseInt(e,10)})
    > 21649 // dammit 'parseInt'! >_<

सूचना: फ़ायरफ़ॉक्स में parseIntलगभग 4 गुना तेजी से काम होता है, लेकिन फिर भी यह दूसरों की तुलना में धीमा है। कुल में: +e< Number< parseFloat<parseInt


3

अंडरस्कोर js रास्ता -

var a = "1,2,3,4",
  b = a.split(',');

//remove falsy/empty values from array after split
b = _.compact(b);
//then Convert array of string values into Integer
b = _.map(b, Number);

console.log('Log String to Int conversion @b =', b);

3

मैट ज़ुंटर्ट का संस्करण जिसका उपयोग arraw function (ES6) के साथ है

const nums = a.split(',').map(x => parseInt(x, 10));

1
10 के लिए क्या प्रतिनिधित्व है ??
दिनेश कानिवु


1

चूंकि सभी उत्तर NaNशामिल किए जाने की अनुमति देते हैं, मैंने सोचा कि मैं यह जोड़ना चाहूंगा कि यदि आप संख्याओं के लिए मिश्रित मूल्यों की एक सरणी को जल्दी से डालना चाहते हैं तो आप कर सकते हैं।

var a = "1,2,3,4,foo,bar";

var b = a.split(',');

var result = b.map(_=>_|0) // Floors the number (32-bit signed integer) so this wont work if you need all 64 bits.

// or b.map(_=>_||0) if you know your array is just numbers but may include NaN.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.