সংখ্যার একটি স্ট্রিংকে সংখ্যার অ্যারেতে কীভাবে রূপান্তর করবেন?


186

আমার নীচে স্ট্রিং রয়েছে -

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

আমি আশা করি এটি কিছুটা পরিষ্কার হয়ে গেছে।


কেন এই কাজ করে? অ-মার্জিত বলে মনে হচ্ছে কারণ এটি খুব বিমূর্ত।
খ্রিস্টান ম্যাথিউ

আমরা মানচিত্রের ফাংশনটি কতগুলি অক্ষর ব্যবহার করে সে সম্পর্কে কেন যত্ন করব?
সেফফাস্টএক্সপ্রেসিভ

বিজোড়, কৌণিক 7 এ প্রথম বন্ধনী আবশ্যক।
জেমস লোফোর্টি

@ সাফেফাস্টএক্সপ্রেসিভ কারণ এটি "গল্ফার" এর একটি সংস্করণ, আপনি যদি না জানেন তবে আমি কী বলছি: কোডগলফ.স্ট্যাকেক্সেঞ্জ ডটকম
ট্র্যাপিআইআই

406

আপনি 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)
জর্জি

দ্রষ্টব্য: আপনি যে লিঙ্কটিতে ব্রাউজার সংস্করণটি পরীক্ষা করেছেন তা নিশ্চিত করুন, আইই 8 আরে.ম্যাপ সমর্থন করে না। (অবাক, এহ?)
জো জ্যাক

1
এই সংখ্যাটি লক্ষণীয় () কেবল পূর্ণসংখ্যার উপর চাপ দেবে না, কেবল সংখ্যাগুলি। আপনার যদি বিশেষভাবে ইনসগুলিতে কাস্ট করতে হয় তবে পার্সেন্ট () ব্যবহার করুন। "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. রেফ: ডেভেলপার.মোজিলা.আর.ইন-
ইউএস

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

বিশদ বিবরণের জন্য অ্যারে.ফ্রোম () এমডিএন-তে যান

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

b সংখ্যার একটি অ্যারে


2
এটিই আমি সর্বাধিক সরল ভাবে খুঁজে পেলাম !!
ফোনজটেক

11

আরও সংক্ষিপ্ত সমাধান: মানচিত্রটি তৈরি করুন এবং যুক্তিগুলি এতে পাস করুন Number:

var a = "1,2,3,4";
var b = a.split(',');
console.log(b);
var c = b.map(Number);
console.log(c);



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-প্রশিক্ষণ - না :

      // 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

আন্ডারস্কোর জেএস উপায় -

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

ব্যবহার অ্যারো ফাংশন সহ ম্যাট জিউনার্টের সংস্করণ (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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.