আপনি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিংকে একটি অক্ষর অ্যারে রূপান্তর করবেন?
আমি ভাবছি "Hello world!"
অ্যারের মতো স্ট্রিং পাচ্ছি
['H','e','l','l','o',' ','w','o','r','l','d','!']
আপনি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিংকে একটি অক্ষর অ্যারে রূপান্তর করবেন?
আমি ভাবছি "Hello world!"
অ্যারের মতো স্ট্রিং পাচ্ছি
['H','e','l','l','o',' ','w','o','r','l','d','!']
উত্তর:
দ্রষ্টব্য: এটি ইউনিকোড অনুসারে নয়।
"I💖U".split('')
4 টি চরিত্রের অ্যারেতে ফলাফল["I", "�", "�", "u"]
যা বিপজ্জনক বাগের দিকে নিয়ে যেতে পারে। নিরাপদ বিকল্পের জন্য নীচের উত্তরগুলি দেখুন।
এটি খালি স্ট্রিং দ্বারা বিভক্ত করুন।
var output = "Hello world!".split('');
console.log(output);
দেখুন String.prototype.split()
MDN ডক্স ।
"randomstring".length;
//12
"randomstring"[2];
//"n"
str.length
স্ট্রিংয়ের অক্ষরের সংখ্যা আপনাকে বলে না, যেহেতু কিছু অক্ষর অন্যের চেয়ে বেশি স্থান নেয়; str.length
আপনাকে 16-বিট সংখ্যার সংখ্যা বলে।
হিসাবে hippietrail প্রস্তাব দেওয়া , মেডার এর উত্তর ভাড়াটে জোড়া এবং অপব্যাখ্যা করে বিরতি করতে পারেন "অক্ষর।" উদাহরণ স্বরূপ:
// DO NOT USE THIS!
> '𝟘𝟙𝟚𝟛'.split('')
[ '�', '�', '�', '�', '�', '�', '�', '�' ]
এই অক্ষর ক্রমগুলি সঠিকভাবে পরিচালনা করতে আমি নিম্নলিখিত ES2015 টি বৈশিষ্ট্য ব্যবহার করার পরামর্শ দিচ্ছি।
> [...'𝟘𝟙𝟚𝟛']
[ '𝟘', '𝟙', '𝟚', '𝟛' ]
> Array.from('𝟘𝟙𝟚𝟛')
[ '𝟘', '𝟙', '𝟚', '𝟛' ]
u
পতাকা> '𝟘𝟙𝟚𝟛'.split(/(?=[\s\S])/u)
[ '𝟘', '𝟙', '𝟚', '𝟛' ]
ব্যবহার /(?=[\s\S])/u
পরিবর্তে/(?=.)/u
কারণ .
নতুন লাইনের সাথে মেলে না ।
আপনি যদি এখনও ES5.1 যুগে থাকেন (বা যদি আপনার ব্রাউজারটি এই রেজেক্সকে সঠিকভাবে পরিচালনা করে না - এজ হিসাবে) তবে আপনি এই বিকল্পটি ব্যবহার করতে পারেন (দ্বারা প্রতিস্থাপিত) ব্যাবেল ):
> '𝟘𝟙𝟚𝟛'.split(/(?=(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))/);
[ '𝟘', '𝟙', '𝟚', '𝟛' ]
দ্রষ্টব্য, বাবেলটিও তুলনামূলকভাবে সারোগেটগুলি হ্যান্ডেল করার চেষ্টা করে। যাইহোক, এটি তুলনামূলকভাবে কম সারোগেটের জন্য কাজ করবে বলে মনে হচ্ছে না।
🏳️🌈
বিভক্ত করে এবং অক্ষরগুলি থেকে ডায়াক্রিটিক্স চিহ্নকে সংযুক্ত করে বিভক্ত করে। আপনি যদি অক্ষরের পরিবর্তে গ্রাফিম ক্লাস্টারে বিভক্ত করতে চান তবে stackoverflow.com/a/45238376 দেখুন ।
spread
সিনট্যাক্স
আপনি স্প্রেড সিনট্যাক্সটি ব্যবহার করতে পারেন , ECMAScript 2015 (ES6) স্ট্যান্ডার্ডে প্রবর্তিত একটি অ্যারে প্রবর্তক :
var arr = [...str];
উদাহরণ
function a() {
return arguments;
}
var str = 'Hello World';
var arr1 = [...str],
arr2 = [...'Hello World'],
arr3 = new Array(...str),
arr4 = a(...str);
console.log(arr1, arr2, arr3, arr4);
প্রথম তিনটি ফলাফল:
["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"]
সর্বশেষ একটি ফলাফল
{0: "H", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "W", 7: "o", 8: "r", 9: "l", 10: "d"}
ব্রাউজার সমর্থন
ECMAScript ES6 সামঞ্জস্যতা টেবিলটি পরীক্ষা করুন ।
আরও পড়া
spread
" splat
" হিসাবেও উল্লেখ করা হয় (যেমন পিএইচপি বা রুবি বা " scatter
" হিসাবে (যেমন পাইথনে )।
ডেমো
আপনি ব্যবহার করতে পারেন Array.from
।
var m = "Hello world!";
console.log(Array.from(m))
এই পদ্ধতিটি ES6 এ চালু করা হয়েছে।
এটি একটি পুরানো প্রশ্ন তবে আমি অন্য একটি সমাধান পেয়েছি যা এখনও তালিকাভুক্ত নয়।
পছন্দসই আউটপুট পেতে আপনি অবজেক্ট.সেসাইন ফাংশনটি ব্যবহার করতে পারেন:
var output = Object.assign([], "Hello, world!");
console.log(output);
// [ 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!' ]
অগত্যা সঠিক বা ভুল নয়, কেবল অন্য একটি বিকল্প।
Array.from("Hello, world")
।
[..."Hello, world"]
এটি ইতিমধ্যে:
var mystring = 'foobar';
console.log(mystring[0]); // Outputs 'f'
console.log(mystring[3]); // Outputs 'b'
বা আরও পুরানো ব্রাউজার বান্ধব সংস্করণের জন্য ব্যবহার করুন:
var mystring = 'foobar';
console.log(mystring.charAt(3)); // Outputs 'b'
alert("Hello world!" == ['H','e','l','l','o',' ','w','o','r','l','d'])
mystring.charAt(index)
।
charAt()
যদিও আমি অ্যারে-ইশ রূপটি ব্যবহার করতে পছন্দ করি। ডার্ন আইই।
আপনি "চরিত্র" হিসাবে ধারণা করতে পারেন এমন তিনটি পৃথক জিনিস রয়েছে (এবং কমপক্ষে) এবং ফলস্বরূপ, আপনি ব্যবহার করতে চাইতে পারেন এমন তিনটি ভিন্ন ধরণের পদ্ধতির।
জাভাস্ক্রিপ্ট স্ট্রিংগুলি মূলত ইউটিএফ -16 কোড ইউনিটের ক্রম হিসাবে উদ্ভাবিত হয়েছিল, ইতিহাসের এক পর্যায়ে যখন ইউটিএফ -16 কোড ইউনিট এবং ইউনিকোড কোড পয়েন্টের মধ্যে একের মধ্যে সম্পর্ক ছিল relationship .length
একটি স্ট্রিং এর সম্পত্তি হল UTF-16 কোড এককে তার দৈর্ঘ্য পরিমাপ করে, এবং যখন আপনি কি someString[i]
আপনি পেতে আমি এর ম হল UTF-16 কোড ইউনিট someString
।
ফলস্বরূপ, আপনি ইনডেক্স ভেরিয়েবলের সাথে সি-স্টাইলের জন্য লুপ ব্যবহার করে স্ট্রিং থেকে ইউটিএফ -16 কোড ইউনিটের একটি অ্যারে পেতে পারেন ...
const yourString = 'Hello, World!';
const charArray = [];
for (let i=0; i<=yourString.length; i++) {
charArray.push(yourString[i]);
}
console.log(charArray);
একই জিনিস অর্জনের বিভিন্ন ছোট ছোট উপায়ও রয়েছে .split()
যেমন খালি স্ট্রিংটি বিভাজক হিসাবে ব্যবহার করার মতো :
const charArray = 'Hello, World!'.split('');
console.log(charArray);
তবে, যদি আপনার স্ট্রিংয়ে কোড পয়েন্ট থাকে যা একাধিক ইউটিএফ -16 কোড ইউনিট নিয়ে গঠিত হয়, এটি তাদের পৃথক কোড ইউনিটে বিভক্ত করবে, যা আপনি চান নাও হতে পারে। উদাহরণস্বরূপ, স্ট্রিংটি '𝟘𝟙𝟚𝟛'
চারটি ইউনিকোড কোড পয়েন্ট (0x1D7D8 এর মাধ্যমে কোড পয়েন্ট 0x1D7D8) দিয়ে গঠিত যা ইউটিএফ -16 এ প্রতিটি দুটি ইউটিএফ -16 কোড ইউনিট নিয়ে গঠিত। যদি আমরা উপরের পদ্ধতিগুলি ব্যবহার করে সেই স্ট্রিংটি বিভক্ত করি তবে আমরা আটটি কোড ইউনিটের একটি অ্যারে পাব:
const yourString = '𝟘𝟙𝟚𝟛';
console.log('First code unit:', yourString[0]);
const charArray = yourString.split('');
console.log('charArray:', charArray);
সুতরাং, সম্ভবত আমরা পরিবর্তে আমাদের স্ট্রিংটি ইউনিকোড কোড পয়েন্টগুলিতে বিভক্ত করতে চাই! ECMAScript 2015 ভাষায় পুনরাবৃত্তির ধারণা যুক্ত করার পরে এটি সম্ভব হয়েছে । স্ট্রিংগুলি এখন পুনরাবৃত্তিযোগ্য এবং আপনি যখন সেগুলি দিয়ে পুনরাবৃত্তি করেন (উদাঃ একটি for...of
লুপ দিয়ে) তখন আপনি ইউনিকোড কোড পয়েন্ট পাবেন, ইউটিএফ -16 কোড ইউনিট নয়:
const yourString = '𝟘𝟙𝟚𝟛';
const charArray = [];
for (const char of yourString) {
charArray.push(char);
}
console.log(charArray);
আমরা এটি ব্যবহার করে সংক্ষিপ্ত করতে পারি Array.from
, যা পুনরাবৃত্তভাবে এটি পুনরাবৃত্তিযোগ্যভাবে উত্তীর্ণ হয়:
const yourString = '𝟘𝟙𝟚𝟛';
const charArray = Array.from(yourString);
console.log(charArray);
যাইহোক, ইউনিকোড কোড পয়েন্ট বৃহত্তম সম্ভব জিনিস যে সম্ভবত একটি "চরিত্র" বিবেচনা করা যেতে পারে না পারেন । জিনিসগুলির কিছু উদাহরণ যা যুক্তিসঙ্গতভাবে একটি একক "চরিত্র" হিসাবে বিবেচিত হতে পারে তবে একাধিক কোড পয়েন্ট সমন্বয়ে তৈরি করা যেতে পারে:
আমরা নীচে দেখতে পাচ্ছি যে যদি আমরা উপরের পুনরুক্তি প্রক্রিয়াটির মাধ্যমে এই জাতীয় অক্ষরগুলির সাথে একটি স্ট্রিংকে অ্যারে রূপান্তরিত করার চেষ্টা করি, ফলাফলগুলি অ্যারেতে অক্ষরগুলি ভেঙে যায়। (যদি আপনার সিস্টেমে কোনও চরিত্র রেন্ডার না করে তবে yourString
নীচে একটি তীব্র উচ্চারণ সহ মূলধন A থাকে , তার পরে যুক্তরাজ্যের পতাকা এবং পরে একটি কালো মহিলা থাকে woman)
const yourString = 'Á🇬🇧👩🏿';
const charArray = Array.from(yourString);
console.log(charArray);
যদি আমরা এগুলির প্রতিটিকে আমাদের চূড়ান্ত অ্যারেতে একটি আইটেম হিসাবে রাখতে চাই, তবে আমাদের কোড পয়েন্ট নয়, গ্রাফিমের একটি অ্যারে দরকার ।
জাভাস্ক্রিপ্ট এর জন্য কোনও অন্তর্নির্মিত সমর্থন নেই - কমপক্ষে এখনও নয়। সুতরাং আমাদের এমন একটি লাইব্রেরি দরকার যা ইউনিকোড বিধিগুলি বোঝে এবং প্রয়োগ করে কোড পয়েন্টগুলির সংমিশ্রণের জন্য গ্রাফিম গঠন করে। ভাগ্যক্রমে, একটি বিদ্যমান: অর্লিংয়ের গ্রাফিম-স্প্লিটার । আপনি এটি এনপিএম দিয়ে ইনস্টল করতে চাইবেন বা, আপনি যদি এনপিএম ব্যবহার না করে থাকেন তবে index.js ফাইলটি ডাউনলোড করে একটি <script>
ট্যাগ দিয়ে পরিবেশন করতে পারেন । এই ডেমোটির জন্য, আমি এটি jsDelivr থেকে লোড করব।
গ্রাফিম-বিদারণ আমাদের দেয় GraphemeSplitter
তিনটি পদ্ধতির সঙ্গে শ্রেণী: splitGraphemes
, iterateGraphemes
, এবং countGraphemes
। স্বাভাবিকভাবেই, আমরা চাই splitGraphemes
:
const splitter = new GraphemeSplitter();
const yourString = 'Á🇬🇧👩🏿';
const charArray = splitter.splitGraphemes(yourString);
console.log(charArray);
<script src="https://cdn.jsdelivr.net/npm/grapheme-splitter@1.0.4/index.js"></script>
এবং আমরা সেখানে রয়েছি - তিনটি গ্রাফিমের অ্যারে, যা সম্ভবত আপনি চেয়েছিলেন।
আপনি স্ট্রিংয়ের দৈর্ঘ্যের উপর পুনরাবৃত্তি করতে পারেন এবং প্রতিটি অবস্থানে অক্ষরকে চাপ দিতে পারেন :
const str = 'Hello World';
const stringToArray = (text) => {
var chars = [];
for (var i = 0; i < text.length; i++) {
chars.push(text[i]);
}
return chars
}
console.log(stringToArray(str))
"😃".charAt(0)
একটি
.split("")
আবার দ্রুততম বিকল্পটিকে তৈরি করে
.split("")
প্রচন্ডভাবে ফায়ারফক্সে অপ্টিমাইজ করা বলে মনে হয়। ক্রোমের সাথে লুপটির অনুরূপ কর্মক্ষমতা রয়েছে এবং ফায়ারফক্স বিভাজন ছোট এবং বড় ইনপুটগুলির জন্য ফায়ার ফক্সে উল্লেখযোগ্যভাবে দ্রুত faster
সহজ উত্তর:
let str = 'this is string, length is >26';
console.log([...str]);
একটি সম্ভাবনা পরেরটি:
console.log([1, 2, 3].map(e => Math.random().toString(36).slice(2)).join('').split('').map(e => Math.random() > 0.5 ? e.toUpperCase() : e).join(''));
এ কেমন?
function stringToArray(string) {
let length = string.length;
let array = new Array(length);
while (length--) {
array[length] = string[length];
}
return array;
}
অ্যারে.প্রোটোটাইপ.স্লাইস পাশাপাশি কাজটি করবে।
const result = Array.prototype.slice.call("Hello world!");
console.log(result);
"𨭎".split('')
ফলাফল["�", "�"]
।