জাভাস্ক্রিপ্ট লাইব্রেরি (যেমন আন্ডারস্কোর, jQuery, MooTools, ইত্যাদি) যে কেউ চিঠি বাড়ানোর পদ্ধতি প্রস্তাব করে সে সম্পর্কে কেউ কি জানেন?
আমি কিছু করতে সক্ষম হতে চাই:
"a"++; // would return "b"
জাভাস্ক্রিপ্ট লাইব্রেরি (যেমন আন্ডারস্কোর, jQuery, MooTools, ইত্যাদি) যে কেউ চিঠি বাড়ানোর পদ্ধতি প্রস্তাব করে সে সম্পর্কে কেউ কি জানেন?
আমি কিছু করতে সক্ষম হতে চাই:
"a"++; // would return "b"
উত্তর:
function nextChar(c) {
return String.fromCharCode(c.charCodeAt(0) + 1);
}
nextChar('a');
অন্যরা যেমন উল্লেখ করেছে, ব্যর্থতা হ'ল প্রত্যাশার সাথে 'z' অক্ষরের মতো মামলাগুলি পরিচালনা করতে পারে না। তবে এটি নির্ভর করে যে আপনি এটি থেকে কী চান। উপরের সমাধানটি 'z' এর পরে চরিত্রটির জন্য '{' ফিরিয়ে দেবে এবং এটি ASCII এ 'z' এর পরের অক্ষর, সুতরাং এটি আপনার ব্যবহারের ক্ষেত্রে কী রয়েছে তার উপর নির্ভর করে আপনি যে ফলাফলটি সন্ধান করছেন তা হতে পারে।
(আপডেট হয়েছে 2019/05/09)
যেহেতু এই উত্তরটি এত বেশি দৃশ্যমানতা পেয়েছে আমি গুগল থেকে এই লোকজনকে যেভাবে হোঁচট খাচ্ছে তাদের সম্ভাব্যরূপে সহায়তার জন্য এটি মূল প্রশ্নের ক্ষেত্রের বাইরে কিছুটা বাড়ানোর সিদ্ধান্ত নিয়েছি।
আমি দেখতে পাই যে আমি প্রায়শই যা চাই তা এমন কিছু যা নির্দিষ্ট চরিত্রের সেটগুলিতে অনুক্রমিক, অনন্য স্ট্রিং তৈরি করে (যেমন কেবলমাত্র অক্ষর ব্যবহার করে), তাই আমি এখানে এই ক্লাসটি অন্তর্ভুক্ত করার জন্য এই উত্তরটি আপডেট করেছি:
class StringIdGenerator {
constructor(chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
this._chars = chars;
this._nextId = [0];
}
next() {
const r = [];
for (const char of this._nextId) {
r.unshift(this._chars[char]);
}
this._increment();
return r.join('');
}
_increment() {
for (let i = 0; i < this._nextId.length; i++) {
const val = ++this._nextId[i];
if (val >= this._chars.length) {
this._nextId[i] = 0;
} else {
return;
}
}
this._nextId.push(0);
}
*[Symbol.iterator]() {
while (true) {
yield this.next();
}
}
}
ব্যবহার:
const ids = new StringIdGenerator();
ids.next(); // 'a'
ids.next(); // 'b'
ids.next(); // 'c'
// ...
ids.next(); // 'z'
ids.next(); // 'A'
ids.next(); // 'B'
// ...
ids.next(); // 'Z'
ids.next(); // 'aa'
ids.next(); // 'ab'
ids.next(); // 'ac'
প্রদত্ত চিঠিটি z হলে কী হবে? এখানে একটি আরও ভাল সমাধান। এটি এ, বি, সি ... এক্স, ওয়াই, জেড, এএ, এ বি, ইত্যাদি ... মূলত এটি এক্সেল স্প্রেডশিটের কলাম আইডির মতো অক্ষরগুলিকে বৃদ্ধি করে।
NextChar ('yz'); // "জেডএ" প্রদান করে
function nextChar(c) {
var u = c.toUpperCase();
if (same(u,'Z')){
var txt = '';
var i = u.length;
while (i--) {
txt += 'A';
}
return (txt+'A');
} else {
var p = "";
var q = "";
if(u.length > 1){
p = u.substring(0, u.length - 1);
q = String.fromCharCode(p.slice(-1).charCodeAt(0));
}
var l = u.slice(-1).charCodeAt(0);
var z = nextLetter(l);
if(z==='A'){
return p.slice(0,-1) + nextLetter(q.slice(-1).charCodeAt(0)) + z;
} else {
return p + z;
}
}
}
function nextLetter(l){
if(l<90){
return String.fromCharCode(l + 1);
}
else{
return 'A';
}
}
function same(str,char){
var i = str.length;
while (i--) {
if (str[i]!==char){
return false;
}
}
return true;
}
// below is simply for the html sample interface and is unrelated to the javascript solution
var btn = document.getElementById('btn');
var entry = document.getElementById('entry');
var node = document.createElement("div");
node.id = "node";
btn.addEventListener("click", function(){
node.innerHTML = '';
var textnode = document.createTextNode(nextChar(entry.value));
node.appendChild(textnode);
document.body.appendChild(node);
});
<input id="entry" type="text"></input>
<button id="btn">enter</button>
if (same(u,'Z')){
হয়েছে if (u == 'Z'){
এবং এটি পুরোপুরি কাজ করে, ধন্যবাদ!
same(str,char)
সেখানে আটকানো হয়নি? আমি জানিনা.
same()
পরিষ্কারভাবে একটি কাস্টম ফাংশন। ওহ ভাল, ==
কাজ করে, এবং যদি আমি সুপারটি নিশ্চিত হতে চাইতাম ===
তবে আমি ব্যবহার করতে পারি , তবে আমি এটি পরীক্ষা করেছি এবং এটি ঠিক আছে। আবার ধন্যবাদ!
একটি সম্ভাব্য উপায় নীচে সংজ্ঞায়িত করা যেতে পারে
function incrementString(value) {
let carry = 1;
let res = '';
for (let i = value.length - 1; i >= 0; i--) {
let char = value.toUpperCase().charCodeAt(i);
char += carry;
if (char > 90) {
char = 65;
carry = 1;
} else {
carry = 0;
}
res = String.fromCharCode(char) + res;
if (!carry) {
res = value.substring(0, i) + res;
break;
}
}
if (carry) {
res = 'A' + res;
}
return res;
}
console.info(incrementString('AAA')); // will print AAB
console.info(incrementString('AZA')); // will print AZB
console.info(incrementString('AZ')); // will print BA
console.info(incrementString('AZZ')); // will print BAA
console.info(incrementString('ABZZ')); // will print ACAA
console.info(incrementString('BA')); // will print BB
console.info(incrementString('BAB')); // will print BAC
// ... and so on ...
আপনি এটি চেষ্টা করতে পারেন
console.log( 'a'.charCodeAt(0))
প্রথমে এটি Ascii সংখ্যায় রূপান্তর করুন .. এটি বৃদ্ধি করুন .. তারপরে Ascii থেকে চর রূপান্তর করুন ..
var nex = 'a'.charCodeAt(0);
console.log(nex)
$('#btn1').on('click', function() {
var curr = String.fromCharCode(nex++)
console.log(curr)
});
আমাকে একাধিকবার চিঠির সিক্যুয়েন্সগুলি ব্যবহার করা দরকার ছিল এবং তাই আমি এই এসও প্রশ্নের ভিত্তিতে এই ফাংশনটি তৈরি করেছিলাম। আমি আশা করি এটি অন্যকে সহায়তা করতে পারে।
function charLoop(from, to, callback)
{
var i = from.charCodeAt(0);
var to = to.charCodeAt(0);
for(;i<=to;i++) callback(String.fromCharCode(i));
}
এটি কিভাবে ব্যবহার করতে:
charLoop("A", "K", function(char) {
//char is one letter of the sequence
});
এই সমস্ত উত্তর যোগ করা:
// first code on page
String.prototype.nextChar = function(i) {
var n = i | 1;
return String.fromCharCode(this.charCodeAt(0) + n);
}
String.prototype.prevChar = function(i) {
var n = i | 1;
return String.fromCharCode(this.charCodeAt(0) - n);
}
উদাহরণ: http://jsfiddle.net/pitaj/3F5Qt/
এই এক ভাল কাজ করে:
var nextLetter = letter => {
let charCode = letter.charCodeAt(0);
let isCapital = letter == letter.toUpperCase();
if (isCapital == true) {
return String.fromCharCode((charCode - 64) % 26 + 65)
} else {
return String.fromCharCode((charCode - 96) % 26 + 97)
}
}
EXAMPLES
nextLetter("a"); // returns 'b'
nextLetter("z"); // returns 'a'
nextLetter("A"); // returns 'B'
nextLetter("Z"); // returns 'A'
হাসির সমাধানের জন্য একটি মাত্র
function nextLetter(str) {
const Alphabet = [
// lower case alphabet
"a", "b", "c",
"d", "e", "f",
"g", "h", "i",
"j", "k", "l",
"m", "n", "o",
"p", "q", "r",
"s", "t", "u",
"v", "w", "x",
"y", "z",
// upper case alphabet
"A", "B", "C",
"D", "E", "F",
"G", "H", "I",
"J", "K", "L",
"M", "N", "O",
"P", "Q", "R",
"S", "T", "U",
"V", "W", "X",
"Y", "Z"
];
const LetterArray = str.split("").map(letter => {
if (Alphabet.includes(letter) === true) {
return Alphabet[Alphabet.indexOf(letter) + 1];
} else {
return " ";
}
});
const Assemble = () => LetterArray.join("").trim();
return Assemble();
}
console.log(nextLetter("hello*3"));
এটা সত্যিই পুরানো। তবে আমার এই কার্যকারিতাটি প্রয়োজন এবং সমাধানগুলির কোনওটিই আমার ব্যবহারের ক্ষেত্রে অনুকূল নয়। আমি একটি, বি, সি ... জেড, আ, আব ... জেডজেড, আ ... তৈরি করতে চেয়েছিলাম এই সাধারণ পুনরাবৃত্তি কাজ করে।
function nextChar(str) {
if (str.length == 0) {
return 'a';
}
var charA = str.split('');
if (charA[charA.length - 1] === 'z') {
return nextID(str.substring(0, charA.length - 1)) + 'a';
} else {
return str.substring(0, charA.length - 1) +
String.fromCharCode(charA[charA.length - 1].charCodeAt(0) + 1);
}
};
বন্ধ করার সময় {a: 'b', b: 'c' ইত্যাদি দিয়ে একটি ফাংশন তৈরি করুন: -
let nextChar = (s => (
"abcdefghijklmopqrstuvwxyza".split('')
.reduce((a,b)=> (s[a]=b, b)), // make the lookup
c=> s[c] // the function returned
))({}); // parameter s, starts empty
ব্যবহার:
nextChar('a')
বড় হাতের অক্ষর এবং অঙ্কগুলি যুক্ত করা হচ্ছে: -
let nextCh = (
(alphabeta, s) => (
[alphabeta, alphabeta.toUpperCase(), "01234567890"]
.forEach(chars => chars.split('')
.reduce((a,b) => (s[a]=b, b))),
c=> s[c]
)
)("abcdefghijklmopqrstuvwxyza", {});
PS জাভাস্ক্রিপ্টের কিছু সংস্করণে, আপনি এর [...chars]
পরিবর্তে ব্যবহার করতে পারেনchars.split('')
এখানে ROT13 অ্যালগরিদম আমি জমা একটি প্রকরণ হয় https://stackoverflow.com/a/28490254/881441 :
function rot1(s) {
return s.replace(/[A-Z]/gi, c =>
"BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza"[
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(c) ] )
}
নীচে ইনপুট কোড এবং সন্ধান আপ কোডেক শীর্ষে রয়েছে (অর্থাত্ আউটপুট কোডটি ইনপুট কোডের সমান তবে 1 দ্বারা স্থানান্তরিত)। ফাংশনটি কেবল অক্ষর পরিবর্তন করে, অর্থাত্ যদি অন্য কোনও চরিত্রটি প্রবেশ করে, তবে এই কোডেকটি এটি অপরিবর্তিত থাকবে।
function charLoop(from, to, callback) {
var i = from.charCodeAt(0);
var to = to.charCodeAt(0);
for (; i <= to; i++) {
callback(String.fromCharCode(i));
}
}
var sequence = "";
charLoop("A", "Z", function (char) {
sequence += char + " ";
});
sequence = sequence.trim();
sequence = sequence.split(" ");
var resseq = sequence;
var res = "";
var prevlet = "";
var nextlet = "";
for (b = 0; b < resseq.length; b++) {
if (prevlet != "") {
prevlet = resseq[b];
}
for (a = 0; a < sequence.length; a++) {
for (j = 1; j < 100; j++) {
if (prevlet == "") {
prevlet = sequence[a];
nextlet = sequence[a + 1];
res += sequence[a] + sequence[a] + 0 + j + " ";
}
else {
if (j < 10) {
res += prevlet + sequence[a] + 0 + j + " ";
}
else {
res += prevlet + sequence[a] + j + " ";
}
}
}
}
}
document.body.innerHTML = res;
@ নাথন প্রাচীরের উত্তর বৃদ্ধি এবং হ্রাসের ভিত্তিতে
// Albhabet auto increment and decrement
class StringIdGenerator {
constructor(chars = '') {
this._chars = chars;
}
next() {
var u = this._chars.toUpperCase();
if (this._same(u,'Z')){
var txt = '';
var i = u.length;
while (i--) {
txt += 'A';
}
this._chars = txt+'A';
return (txt+'A');
} else {
var p = "";
var q = "";
if(u.length > 1){
p = u.substring(0, u.length - 1);
q = String.fromCharCode(p.slice(-1).charCodeAt(0));
}
var l = u.slice(-1).charCodeAt(0);
var z = this._nextLetter(l);
if(z==='A'){
this._chars = p.slice(0,-1) + this._nextLetter(q.slice(-1).charCodeAt(0)) + z;
return p.slice(0,-1) + this._nextLetter(q.slice(-1).charCodeAt(0)) + z;
} else {
this._chars = p+z;
return p + z;
}
}
}
prev() {
var u = this._chars.toUpperCase();
console.log("u "+u)
var l = u.slice(-1).charCodeAt(0);
var z = this._nextLetter(l);
var rl = u.slice(1)
var y = (rl == "A") ? "Z" :this._prevLetter(rl.charCodeAt(0))
var txt = '';
var i = u.length;
var j = this._chars
var change = false
while (i--) {
if(change){
if (u[u.length-1] == "A"){
txt += this._prevLetter(u[i].charCodeAt(0))
}else{
txt += u[i]
}
}else{
if (u[u.length-1] == "A"){
txt += this._prevLetter(u[i].charCodeAt(0))
change = true
}else{
change = true
txt += this._prevLetter(u[i].charCodeAt(0))
}
}
}
if(u == "A" && txt == "Z"){
this._chars = ''
}else{
this._chars = this._reverseString(txt);
}
console.log(this._chars)
return (j);
}
_reverseString(str) {
return str.split("").reverse().join("");
}
_nextLetter(l){
if(l<90){
return String.fromCharCode(l + 1);
}
else{
return 'A';
}
}
_prevLetter(l){
if(l<=90){
if(l == 65) l = 91
return String.fromCharCode(l-1);
}
else{
return 'A';
}
}
_same(str,char){
var i = str.length;
while (i--) {
if (str[i]!==char){
return false;
}
}
return true;
}
}
ব্যবহার
const ids = new StringIdGenerator();
ids.next();
ids.prev();