আমি নিম্নলিখিত স্ট্রিংটিকে '14 2'দুটি পূর্ণসংখ্যার অ্যারে রূপান্তর করতে চাই । আমি এটা কিভাবে করবো ?
উত্তর:
আপনি স্ট্রিংগুলির.split() একটি অ্যারে পেতে পারেন , তারপরে এগুলিকে সংখ্যায় রূপান্তর করতে লুপ লুপ করুন:
var myArray = "14 2".split(" ");
for(var i=0; i<myArray.length; i++) { myArray[i] = +myArray[i]; }
//use myArray, it's an array of numbers
+myArray[i]শুধু একটি দ্রুত উপায় নম্বর রূপান্তর করতে হয়, যদি আপনি নিশ্চিত তারা পূর্ণসংখ্যার আপনি শুধু করতে পারি না হন:
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
myArray.forEach(function(x,y,z){ z[y]=x|0 })
.min.jsএবং .jsযদি আপনি আপনার কোডটি প্রকাশ করতে চান ... মনে রাখবেন যে এই সংশোধনটি অস্পষ্টতার জন্য নয় (বা এটি হওয়া উচিত নয়, কারণ এটি এর জন্য অকেজো সম্পর্কে নয়), এটি HTTP ওভারহেড হ্রাস করার জন্য - একটি দ্রুত পৃষ্ঠা লোড আপনার ব্যবহারকারীদের জন্য।
আধুনিক ব্রাউজারগুলির জন্য একটি দ্রুত:
'14 2'.split(' ').map(Number);
// [14, 2]`
তাই ... পুরানো থ্রেড, আমি জানি, কিন্তু ...
@ রোকো মুসোলিনোর একটি দুর্দান্ত ক্যাচ ছিল; এখানে একটি বিকল্প:
টিএল; ডিআর:
const intArray = [...("5 6 7 69 foo 0".split(' ').filter(i => /\d/g.test(i)))]
ভুল :"5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
এখানে তালিকাভুক্ত আরও মার্জিত সমাধানগুলির একটি সূক্ষ্ম ত্রুটি রয়েছে, বিশেষত @ আমিলারা এবং @ মারকাস 'অন্যথায় সুন্দর উত্তর।
সমস্যাটি ঘটে যখন স্ট্রিং অ্যারের কোনও উপাদান পূর্ণসংখ্যার মতো না হয়, সম্ভবত কোনও ইনপুটটিতে বৈধতা ছাড়াই। স্বীকৃত উদাহরণের জন্য ...
সমস্যাটি:
var effedIntArray = "5 6 7 69 foo".split(' ').map(Number); // [5, 6, 7, 69, NaN]
যেহেতু আপনি অবশ্যই একটি নির্ভেজাল অ্যারে চান, এটি একটি সমস্যা want সত্যি বলতে , আমি আমার স্ক্রিপ্টে এসও কোড অনুলিপি না করা পর্যন্ত আমি এটি ধরিনি ...: /
(সামান্য-কম Baller) ফিক্স:
var intArray = "5 6 7 69 foo".split(" ").map(Number).filter(Boolean); // [5, 6, 7, 69]
সুতরাং, এখন আপনার যখন ক্রেপ ইন্ট স্ট্রিং রয়েছে তখনও আপনার আউটপুটটি খাঁটি পূর্ণসংখ্যা অ্যারে। অন্যরা বেশিরভাগ ক্ষেত্রে সত্যিই সেক্সি, তবে আমি আমার বেশিরভাগ অস্পষ্টতার সাথে প্রস্তাব দিতে চাইতাম না । আমার কৃতিত্বের হিসাবে এটি এখনও এক-লাইনার ...
আশা করি এটি কারও সময় বাঁচায়!
.filter(Boolean)সঙ্গে.filter( (x) => !Number.isNaN(x))
var result = "14 2".split(" ").map(function(x){return parseInt(x)});
parseInt()।
.mapকোনও লাইব্রেরি ছাড়াই যে কোনও ব্রাউজারে জেএসে ব্যবহার করতে এবং অনুরূপ করতে পারি ।
তুষার গুপ্ত উত্তরের বিকল্পটি হ'ল:
'14 2'.split(' ').map(x=>+x);
// [14, 2]`
কোড গল্ফে আপনি 1 টি অক্ষর সংরক্ষণ করেন। এখানে "+" হ'ল "আনারি প্লাস" অপারেটর, পার্সেন্টের মতো কাজ করে।
প্রথমে স্প্রেগুলিতে স্ট্রিংটি বিভক্ত করুন:
var result = '14 2'.split(' ');
তারপরে স্ট্রিংয়ের ফলাফল অ্যারেটিকে পূর্ণসংখ্যায় রূপান্তর করুন:
for (var i in result) {
result[i] = parseInt(result[i], 10);
}
parseInt(), অন্যথায় আপনি সেখানে অষ্টাল পেতে পারেন।
0, বা 0xএটি ভাল হওয়া উচিত।
parseInt-প্রশ্নের বিরুদ্ধে বিন্দু :
ল্যাম্বডাস এবং / অথবা radixপ্যারামিটার দেওয়ার দরকার নেই parseInt, কেবল ব্যবহার করুন parseFloatবা Numberপরিবর্তে।
কারণ:
ইহা কাজ করছে:
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
এটা খাটো।
এটি একটি সামান্য বিট দ্রুত এবং ক্যাশে সুবিধা গ্রহণ করে, যখন 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
let idsArray = ids.split(',').map((x) => parseInt(x));
আমাদের বিভক্ত ফাংশন :
var splitresult = "14 2".split(" ");
for(var i=myArray.length; i--;) myArray[i] = myArray[i]|0;বিটওয়াইজ রূপান্তর এবং সংক্ষিপ্ত লুপিং ব্যবহার করে