क्या कोई जावास्क्रिप्ट लाइब्रेरी (जैसे अंडरस्कोर, 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)
चूँकि इस उत्तर को इतनी अधिक दृश्यता मिली है कि मैंने इसे मूल प्रश्न के दायरे से थोड़ा सा आगे बढ़ाने का फैसला किया है ताकि संभवतः ऐसे लोगों की मदद की जा सके जो Google से इस पर ठोकर खा रहे हैं।
मुझे लगता है कि जो मैं अक्सर चाहता हूं वह कुछ ऐसा है जो एक निश्चित चरित्र सेट (जैसे केवल अक्षरों का उपयोग) में अनुक्रमिक, अद्वितीय तार उत्पन्न करेगा, इसलिए मैंने एक वर्ग को शामिल करने के लिए इस उत्तर को अपडेट किया है जो यहां करेगा:
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'); // रिटर्न "ZA"
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 से char में परिवर्तित करें।
var nex = 'a'.charCodeAt(0);
console.log(nex)
$('#btn1').on('click', function() {
var curr = String.fromCharCode(nex++)
console.log(curr)
});
FIDDLE की जाँच करें
मुझे कई बार अक्षरों के अनुक्रमों का उपयोग करने की आवश्यकता थी और इसलिए मैंने इस SO प्रश्न के आधार पर यह फ़ंक्शन बनाया। मुझे उम्मीद है कि यह दूसरों की मदद कर सकता है।
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"));
यह वास्तव में पुराना है। लेकिन मुझे इस कार्यक्षमता की आवश्यकता थी और मेरे उपयोग के मामले में कोई भी समाधान इष्टतम नहीं है। मैं a, b, c ... z, aa, ab ... zz, aaa ... उत्पन्न करना चाहता था। यह साधारण पुनरावर्तन कार्य करता है।
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('')
यहाँ मैं https://stackoverflow.com/a/28490254/881441 पर सबमिट किए गए रोट 13 अल्गोरिथम की भिन्नता है :
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();