চরিত্র এন টাইমস পুনরাবৃত্তি


602

পার্লে আমি সিনট্যাক্স ব্যবহার করে একাধিকবার একটি অক্ষর পুনরাবৃত্তি করতে পারি:

$a = "a" x 10; // results in "aaaaaaaaaa"

জাভাস্ক্রিপ্টে এটি সম্পাদন করার কোনও সহজ উপায় আছে? আমি স্পষ্টত কোনও ফাংশন ব্যবহার করতে পারি, তবে আমি ভাবছিলাম যে কোনও অন্তর্নির্মিত বা অন্য কোনও চালাক কৌশল আছে কিনা।

উত্তর:


1201

এই দিনগুলিতে repeatস্ট্রিং পদ্ধতি প্রায় সর্বত্র প্রয়োগ করা হয়। (এটি ইন্টারনেট এক্সপ্লোরারে নেই )) সুতরাং আপনার যদি পুরানো ব্রাউজারগুলির সমর্থন না করা হয় তবে আপনি কেবল লিখতে পারেন:

"a".repeat(10)

আগে repeat, আমরা এই হ্যাকটি ব্যবহার করেছি:

Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"

(দ্রষ্টব্য যে 11 দৈর্ঘ্যের একটি অ্যারে আপনাকে কেবল 10 "এ" Array.joinদেয় , যেহেতু অ্যারের উপাদানগুলির মধ্যে তর্কটি রাখে ))

সাইমন আরও উল্লেখ করেছেন যে এই জাসস্পিফ অনুসারে , সাফারি এবং ক্রোমে দ্রুত (তবে ফায়ারফক্স নয়) একটি লুপের জন্য (যদিও কিছুটা কম সংক্ষিপ্ত) ব্যবহার করে একটি অক্ষরকে একাধিকবার পুনরাবৃত্তি করা দ্রুত হয়েছে বলে মনে হয়।


4
এছাড়াও, আপনি একটি নির্দিষ্ট দৈর্ঘ্যের পরিবর্তে চলকটি ব্যবহার করতে পারেন - অ্যারে (20-লেন), 20 টি পর্যন্ত স্ট্রিং প্যাড করতে বলুন
জন সি

7
লুপের পদ্ধতিটি দ্রুত হতে পারে তবে এটি আরও ভার্বোজ। প্লাস আমি প্রথম মন্তব্যের জন্য সমস্ত আপভোজন দ্বারা বিস্মিত হয়েছি, এই বিষয়টি বিবেচনা করে যে অ্যারে দৈর্ঘ্য পরিবর্তনশীল যখন সাধারণত এটি কার্যকর হয় যখন উদাহরণস্বরূপArray(rawValue.length + 1).join("*")
ডিজিন অক্সিজেন

এটি 0 এবং 1 কেসে কার্যকর হয় না, কারণ তারা অভিন্ন ফলাফল দেয়।
রায়ান 7

2
সূত্রটি হ'ল Array(n+1).join("a")। যখন এন = 0, এটি খালি স্ট্রিংটি ফেরত দেয় এবং যখন এন = 1, এটি ফিরে আসে "a"। সুতরাং আমি মনে করি এটি সব ক্ষেত্রেই কার্যকর হয়।
জেসন ওরেডরফ

1
@ নীল এর কারণ জেএস ইঞ্জিনগুলি স্ট্রিং দৈর্ঘ্যের উপর একটি সীমা আরোপ করে। ক্রোম এবং ফায়ারফক্সে, সীমাটি 2 ^ 30 (প্রায় এক বিলিয়ন) এর কাছাকাছি। 10 ^ 12 এক ট্রিলিয়ন।
জেসন ওরেডরফ

301

একটি নতুন ES6 সম্প্রীতিতে, পুনরাবৃত্তি সহ এটি করার জন্য আপনার কাছে স্থানীয় উপায় থাকবে । এছাড়াও ES6 এখনই কেবল পরীক্ষামূলক, এই বৈশিষ্ট্যটি ইতিমধ্যে এজ, এফএফ, ক্রোম এবং সাফারিতে উপলব্ধ

"abc".repeat(3) // "abcabcabc"

এবং অবশ্যই যদি পুনরাবৃত্তি ফাংশন না পাওয়া যায় তবে আপনি পুরানো-ভাল ব্যবহার করতে পারেন Array(n + 1).join("abc")


54

আপনি যদি নিজেকে অনেক বার পুনরায় পুনরুদ্ধার করেন তবে সুবিধাজনক:

String.prototype.repeat = String.prototype.repeat || function(n){
  n= n || 1;
  return Array(n+1).join(this);
}

alert(  'Are we there yet?\nNo.\n'.repeat(10)  )


53
বিল্টিনের প্রোটোটাইপগুলিকে দূষিত করার জন্য এটি একটি খারাপ কোডিং অনুশীলন।
tuomassalo

3
@ নুরেটিন আরও আলোচনার জন্য প্রোগ্রামার.সটাকেক্সচেঞ্জ / প্রশ্নগুলি ১০০৩৪০২০ / দেখুন দেখুন। আমি স্বাক্ষর সহ একটি (সঠিকভাবে স্কোপযুক্ত) স্ট্যাটিক সহায়ক ফাংশন যুক্ত করব repeat(str, n)
tuomassalo

4
আমি n= n || 1অংশটি সরিয়ে ফেলব (বা পরীক্ষা না করা হয়েছে কিনা nতা পরীক্ষা করে দেখুন ), যাতে আপনি বারবার পুনরাবৃত্তি করতে পারেন 0
chodorowicz

3
ES6 এর জন্য মোজিলার অফিশিয়াল পলফিলটি দেখুন: বিকাশকারী.মোজিলা.আর
বার্কল্যান্ড

3
@ ক্রিসভ String.repeatকেবলমাত্র এসএস-এ যুক্ত হয়েছিল, যা জুন ২০১৫ অবধি চূড়ান্ত হয়নি ized সুতরাং আমি মনে করি আমার
বক্তব্যটি

13

সর্বাধিক পারফরম্যান্স-ওয়াইস হ'ল https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / স্ট্রিং / রিপিট

সংক্ষিপ্ত সংস্করণ নীচে।

  String.prototype.repeat = function(count) {
    if (count < 1) return '';
    var result = '', pattern = this.valueOf();
    while (count > 1) {
      if (count & 1) result += pattern;
      count >>>= 1, pattern += pattern;
    }
    return result + pattern;
  };
  var a = "a";
  console.debug(a.repeat(10));

মজিলা থেকে পলিফিল:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str = '' + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('repeat count must be non-negative');
    }
    if (count == Infinity) {
      throw new RangeError('repeat count must be less than infinity');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }
    // Ensuring count is a 31-bit integer allows us to heavily optimize the
    // main part. But anyway, most current (August 2014) browsers can't handle
    // strings 1 << 28 chars or longer, so:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('repeat count must not overflow maximum string size');
    }
    var rpt = '';
    for (;;) {
      if ((count & 1) == 1) {
        rpt += str;
      }
      count >>>= 1;
      if (count == 0) {
        break;
      }
      str += str;
    }
    // Could we try:
    // return Array(count + 1).join(this);
    return rpt;
  }
}

এটি একটি ভাল, তবে নতুন নেটিভ "পুনরাবৃত্তি" আরও দ্রুত এবং কোনও বাস্তবায়নের প্রয়োজন নেই, যাইহোক ধন্যবাদ!
গোটি মেটাল

1
আপনি কি এর অর্থ ব্যাখ্যা করতে পারেন count >>>= 1, pattern += pattern;? এটা কি ধরনের বিবৃতি?
সোশি আশের

তাহলে এই দেশীয় পুনরাবৃত্তি জন্য একটি পলিফিল, তারপর? if (!String.prototype.repeat) {শুরুতে এবং }শেষে কেবল একটি যুক্ত করুন ।
trlkly

>>> = স্বাক্ষরবিহীন ডান শিফট অ্যাসাইনমেন্ট (যেমন গণনা = গণনা >>> 1) দেখুন: বিকাশকারী.মোজিলা.আর.ইন
ইউএস

12

একটি বিকল্প হ'ল:

for(var word = ''; word.length < 10; word += 'a'){}

আপনার যদি একাধিক অক্ষর পুনরাবৃত্তি করতে হয় তবে আপনার শর্তসাপেক্ষ গুণ করুন:

for(var word = ''; word.length < 10 * 3; word += 'foo'){}

দ্রষ্টব্য: আপনাকে 1 হিসাবে ওভারশুট করতে হবে নাword = Array(11).join('a')


10

আপনি যদি আপনার প্রকল্পে কোনও লাইব্রেরি অন্তর্ভুক্ত করার বিরোধী না হন তবে লড্যাশের পুনরাবৃত্তি ফাংশন রয়েছে।

_.repeat('*', 3);
// → '***

https://lodash.com/docs#repeat


10

সমস্ত ব্রাউজারের জন্য

নিম্নলিখিত ফাংশনটি গ্রহণযোগ্য উত্তরে প্রস্তাবিত বিকল্পের চেয়ে অনেক দ্রুত সম্পাদন করবে:

var repeat = function(str, count) {
    var array = [];
    for(var i = 0; i < count;)
        array[i++] = str;
    return array.join('');
}

আপনি এটি এর মতো ব্যবহার করবেন:

var repeatedString = repeat("a", 10);

গৃহীত উত্তরের প্রস্তাবিত বিকল্পটির সাথে এই ফাংশনের কার্য সম্পাদনের তুলনা করতে, বেঞ্চমার্কের জন্য এই ফিডল এবং এই ফিডলটি দেখুন

শুধুমাত্র আধুনিক ব্রাউজারগুলির জন্য

আধুনিক ব্রাউজারগুলিতে আপনি এখন String.prototype.repeatপদ্ধতিটি ব্যবহার করে এটি করতে পারেন :

var repeatedString = "a".repeat(10);

MDN এ এই পদ্ধতি সম্পর্কে আরও পড়ুন ।

এই বিকল্পটি আরও দ্রুত। দুর্ভাগ্যক্রমে, এটি ইন্টারনেট এক্সপ্লোরারের কোনও সংস্করণে কাজ করে না। সারণীতে থাকা সংখ্যাগুলি প্রথম ব্রাউজার সংস্করণ নির্দিষ্ট করে যা পদ্ধতিটিকে পুরোপুরি সমর্থন করে:

এখানে চিত্র বর্ণনা লিখুন


9
Array(10).fill('a').join('')

যদিও সর্বাধিক ভোট দেওয়া উত্তরটি কিছুটা কমপ্যাক্ট, এই পদ্ধতির সাথে আপনাকে কোনও অতিরিক্ত অ্যারে আইটেম যুক্ত করতে হবে না।


1
দুর্ভাগ্যক্রমে, পূরণের পদ্ধতি আইই তে সমর্থিত নয় এবং আপনি যদি আইপি তুলনামূলক না হন তবে আপনি পুনরাবৃত্তি পদ্ধতিটিও ব্যবহার করতে পারেন।
মিশিগেল

1
আপনি fill()যদি join("a")একা একই জিনিস ব্যবহার করেন তবে আপনি অতিরিক্ত পদ্ধতিটি কেন ব্যবহার করবেন ...
vsync

7
/**  
 * Repeat a string `n`-times (recursive)
 * @param {String} s - The string you want to repeat.
 * @param {Number} n - The times to repeat the string.
 * @param {String} d - A delimiter between each string.
 */

var repeat = function (s, n, d) {
    return --n ? s + (d || "") + repeat(s, n, d) : "" + s;
};

var foo = "foo";
console.log(
    "%s\n%s\n%s\n%s",

    repeat(foo),        // "foo"
    repeat(foo, 2),     // "foofoo"
    repeat(foo, "2"),   // "foofoo"
    repeat(foo, 2, "-") // "foo-foo"
);

7

ES2015 / ES6 এ আপনি ব্যবহার করতে পারেন "*".repeat(n)

সুতরাং এটি কেবল আপনার প্রকল্পগুলিতে যুক্ত করুন এবং আপনি যেতে ভাল।

  String.prototype.repeat = String.prototype.repeat || 
    function(n) {
      if (n < 0) throw new RangeError("invalid count value");
      if (n == 0) return "";
      return new Array(n + 1).join(this.toString()) 
    };

স্ক্রিপ্ট 5029: এই পদ্ধতির ব্যবহার করার সময় অ্যারের দৈর্ঘ্য অবশ্যই একটি সীমাবদ্ধ ইতিবাচক পূর্ণসংখ্যার হতে হবে
andrepulo

5

দ্রুত এন অক্ষরের পুনরাবৃত্তি করার আরেকটি আকর্ষণীয় উপায় হ'ল দ্রুত ক্ষতিকারক অ্যালগরিদম থেকে ধারণাটি ব্যবহার করা:

var repeatString = function(string, n) {
    var result = '', i;

    for (i = 1; i <= n; i *= 2) {
        if ((n & i) === i) {
            result += string;
        }
        string = string + string;
    }

    return result;
};

কেন আপনি "আকর্ষণীয় উপায়" বলছেন? এখানে এত আকর্ষণীয় কি? এটি হ'ল সুস্পষ্ট সমাধান, কম্পিউটার প্রোগ্রামের সবচেয়ে মৌলিক উদাহরণ।
vsync

2

আমার প্রকল্পগুলিতে একটি মান পুনরাবৃত্তি করার জন্য আমি পুনরাবৃত্তি ব্যবহার করি

উদাহরণ স্বরূপ:

var n = 6;
for (i = 0; i < n; i++) {
    console.log("#".repeat(i+1))
}

তবে সাবধান থাকুন কারণ এই পদ্ধতিটি ইসমাস্ক্রিপ্ট 6 স্পেসিফিকেশনে যুক্ত করা হয়েছে।


2
function repeatString(n, string) {
  var repeat = [];
  repeat.length = n + 1;
  return repeat.join(string);
}

repeatString(3,'x'); // => xxx
repeatString(10,'🌹'); // => "🌹🌹🌹🌹🌹🌹🌹🌹🌹🌹"

1

আমি যা ব্যবহার করি তা এখানে:

function repeat(str, num) {
        var holder = [];
        for(var i=0; i<num; i++) {
            holder.push(str);
        }
        return holder.join('');
    }

0

আমি @ বোনবনের উত্তরটি প্রসারিত করতে যাচ্ছি । তার পদ্ধতিটি "বিদ্যমান স্ট্রিংগুলিতে এন অক্ষর যুক্ত করার" একটি সহজ উপায়, যদি কারও পক্ষে এটির প্রয়োজন হয়। উদাহরণস্বরূপ যেহেতু "একটি গুগল" হল 1 এর পরে 100 জিরো রয়েছে

for(var google = '1'; google.length < 1 + 100; google += '0'){}
document.getElementById('el').innerText = google;
<div>This is "a google":</div>
<div id="el"></div>

দ্রষ্টব্য: আপনাকে শর্তসাপেক্ষে মূল স্ট্রিংয়ের দৈর্ঘ্য যুক্ত করতে হবে।



0
var stringRepeat = function(string, val) {
  var newString = [];
    for(var i = 0; i < val; i++) {
      newString.push(string);
  }
  return newString.join('');
}

var repeatedString = stringRepeat("a", 1);

0

ওয়ান-লাইনার হিসাবেও ব্যবহার করা যেতে পারে:

function repeat(str, len) {
    while (str.length < len) str += str.substr(0, len-str.length);
    return str;
}

যে কোনও প্রতিযোগিতায় "যখন" তার চেয়ে "বেশি" দ্রুত হয়। :-)
জুনিহ


0

এইভাবে আপনি কোনও ফাংশনটিতে কল করতে পারবেন এবং অ্যারে () এর সাহায্যে ফলাফল পেতে পারেন এবং যোগদান করতে পারেন ()

function repeatStringNumTimes(str, num) {
  // repeat after me
  return num > 0 ? Array(num+1).join(str) : "";
}

console.log(repeatStringNumTimes("a",10))


-1
String.prototype.repeat = function (n) { n = Math.abs(n) || 1; return Array(n + 1).join(this || ''); };

// console.log("0".repeat(3) , "0".repeat(-3))
// return: "000" "000"

1
String.prototype.repeatস্থানীয়ভাবে বর্তমান ব্রাউজারগুলিতে অন্তর্ভুক্ত থাকা এই ওভাররাইটগুলি । এছাড়াও, কেন এটি সংশোধন? আপনার এগুলি সমস্ত এক লাইনে লেখার দরকার নেই।
ব্লেন্ডার

আই-তে কোনও 'পুনরাবৃত্তি' বৈশিষ্ট্য নেই, তাই প্রোটোটাইপ প্রয়োজন।
Caglayan ALTINCI

-3

এটি একটি ES6 সংস্করণ

const repeat = (a,n) => Array(n).join(a+"|$|").split("|$|");
repeat("A",20).forEach((a,b) => console.log(a,b+1))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.