কীভাবে 1… এন সমন্বিত একটি অ্যারে তৈরি করবেন


1161

আমি নীচে জাভাস্ক্রিপ্ট অ্যারে তৈরি করতে 1 এর মাধ্যমে 1 তে এন এর জন্য যে বিকল্পগুলি অনুসন্ধান করছি যেখানে এন কেবল রানটাইমতে পরিচিত।

var foo = [];

for (var i = 1; i <= N; i++) {
   foo.push(i);
}

আমার কাছে মনে হচ্ছে লুপ ছাড়াই এটি করার কোনও উপায় থাকা উচিত।


224
এই পুরো পৃষ্ঠাটি পড়ার পরে, আমি এই সিদ্ধান্তে পৌঁছেছি যে আপনার নিজের সরল ফর-লুপটি সবচেয়ে সহজ, সবচেয়ে পঠনযোগ্য এবং কমপক্ষে ত্রুটি-প্রবণ-
কোকোডোকো

কারও যদি আরও উন্নত কিছু প্রয়োজন হয়, আমি একটি নোড.জেএস লাইব তৈরি করেছি যা এটি সংখ্যা, অক্ষর, নেতিবাচক / ধনাত্মক ব্যাপ্তি ইত্যাদির জন্য করে g github.com/jonschlinkert/fill-range । এটা তোলে ব্যবহৃত github.com/jonschlinkert/braces বক্রবন্ধনী সম্প্রসারণ এবং জন্য github.com/jonschlinkert/micromatch উল্লিখিত glob নিদর্শনের জন্য
jonschlinkert

1
"... 1 ... এন" এর পরিবর্তে "দৈর্ঘ্যের অ্যারে কিভাবে তৈরি করবেন" বলার জন্য আপনার সম্পাদনা করা উচিত, পরে বোঝা যাচ্ছে সেখানে 1 থেকে N এর
মানযুক্ত

7
@ স্টিভেনল্যান্ডো কেন ওপি নাম পরিবর্তন করতে হবে? তিনি মান সঙ্গে একটি অ্যারে চান 1 ... N?
আন্দ্রে এলরিকো

ভাল প্রশ্ন, ভাল শিরোনাম, (কিন্ডা) নিরীহ উত্তর।
বিটারব্লিউ

উত্তর:


381

আপনি যদি পরে যা পেয়ে থাকেন তবে আপনি এমন একটি সংখ্যার অ্যারে চান 1..nযা আপনি পরে লুপ করতে পারেন।

আপনার যদি প্রয়োজন হয় তবে আপনি কি তার বদলে এটি করতে পারেন?

var foo = new Array(45); // create an empty array with length 45

তারপরে আপনি যখন এটি ব্যবহার করতে চান ... (আন-অপ্টিমাইজড, কেবল উদাহরণস্বরূপ)

for(var i = 0; i < foo.length; i++){
  document.write('Item: ' + (i + 1) + ' of ' + foo.length + '<br/>'); 
}

উদাহরণস্বরূপ, যদি আপনাকে অ্যারেতে কোনও সঞ্চয় করার প্রয়োজন না হয় , আপনার কেবল সঠিক দৈর্ঘ্যের একটি ধারক প্রয়োজন যা আপনি পুনরাবৃত্তি করতে পারেন ... এটি আরও সহজ হতে পারে।

এটি এখানে কর্মে দেখুন: http://jsfiddle.net/3kcvm/


4
আপনি আমার প্রশ্নের চেয়ে আমার প্রশ্নের চেয়ে উচ্চারণ করতে পেরে মুগ্ধ হয়েছিলেন, আপনি প্রতিচ্ছবি হিসাবে সত্যই আমার সঠিক প্রয়োজন এমন সংখ্যার একটি অ্যারে যা আমি পরে লুপ করতে পারি :) আপনার উত্তরের জন্য ধন্যবাদ Thanks
Godders

147
@ গুড্ডার্স: আপনি যদি এটিই খুঁজছেন তবে আপনাকে অ্যারের দরকার কেন? একটি সরল var n = 45;এবং তারপরে লুপিং 1..nকরতে হবে।
ক্যাসাব্ল্যাঙ্কা

3
@ গুড্ডার্স - লক্ষ করুন, এম এর দৈর্ঘ্য তৈরি হওয়ার পরে আপনি যদি অ্যারের আকার হ্রাস করতে চান তবে কেবল ব্যবহার করুন foo.length = M--- কাট অফ তথ্য হারিয়ে গেছে। এটি অ্যাকশন দেখুন ==> jsfiddle.net/ACMXp
পিটার

24
কেন এই উত্তর এমনকি উচ্চতর হয়েছে তা আমি সত্যিই বুঝতে পারি না ... বিশেষত যখন ওপি নিজেই সম্মত হয় তবে উপরের কয়েকটি মন্তব্যে এটি কোনও অর্থ দেয় না যেহেতু তিনি স্রেফ করতে পারতেন var n = 45;
প্ল্লেক্স

72
@ সানলিফ: দয়া করে মনে রাখবেন, এটি new Array(45);"45 এলিমেন্ট অ্যারে তৈরি করে না" (যেমনটি একইভাবে [undefined,undefined,..undefined]হয়)। এটি বরং "দৈর্ঘ্য = 45" ( [undefined x 45]) এর মতো খালি অ্যারে তৈরি করে var foo = []; foo.length=45;। এ কারণেই forEach, এবং mapএই ক্ষেত্রে প্রয়োগ করা হবে না।
টমালেক

1307

ES6 এ অ্যারে () এবং কী () পদ্ধতি ব্যবহার করে using

Array.from(Array(10).keys())
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

সংক্ষিপ্ত সংস্করণ স্প্রেড অপারেটর ব্যবহার করে ।

[...Array(10).keys()]
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

74
কেবলমাত্র একটি নোট, এটি সর্বদা 0 থেকে শুরু হবে 1 1 থেকে শুরু করতে mapমানগুলি ( [...Array(10).keys()].map(x => x++);) মান সমন্বয় করতে অ্যারেতে একটি চেইন
স্টার্লিং আর্চার

32
শুধু পরিবর্তন map(x => x++)করার map(x => ++x)প্রাধান্য বৃদ্ধি কারণে মান ফেরার পর :) ঘটবে
ব্রক

92
আর কি !? mapআপনি যখন সহজভাবে করতে পারেন কেন slice? [...Array(N+1).keys()].slice(1)
রবিন

19
বা ব্যবহার করবেন না keysএবং কেবল 1 মানচিত্র ->Array.from(Array(10)).map((e,i)=>i+1)
ইয়োনটানমনে

60
বা কী এবং মানচিত্র ব্যবহার করবেন না এবং কেবল ম্যাপিং ফাংশনটি পাস করুনfrom Array.from(Array(10), (e,i)=>i+1)
ফ্যাবিও অ্যান্টুনেস

844

আপনি এটি করতে পারেন:

var N = 10; 
Array.apply(null, {length: N}).map(Number.call, Number)

ফলাফল: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

বা এলোমেলো মান সহ:

Array.apply(null, {length: N}).map(Function.call, Math.random)

ফলাফল: [0.7082694901619107, 0.9572225909214467, 0.8586748542729765, 0.8653848143294454, 0.008339877473190427, 0.9911756622605026, 0.8133423360995948, 0.837758846535935

ব্যাখ্যা

প্রথমে নোট করুন যেটি Number.call(undefined, N)সমান Number(N), যা কেবল ফেরত দেয় N। আমরা সেই সত্যটি পরে ব্যবহার করব।

Array.apply(null, [undefined, undefined, undefined])এর সমতুল্য Array(undefined, undefined, undefined), যা একটি ত্রি-উপাদান অ্যারে উত্পাদন করে undefinedএবং প্রতিটি উপাদানকে বরাদ্দ করে।

কীভাবে আপনি এটি এন উপাদানগুলিকে সাধারণ করতে পারেন ? কীভাবে Array()কাজ করে তা বিবেচনা করুন , যা এরকম কিছু হয়:

function Array() {
    if ( arguments.length == 1 &&
         'number' === typeof arguments[0] &&
         arguments[0] >= 0 && arguments &&
         arguments[0] < 1 << 32 ) {
        return [  ];  // array of length arguments[0], generated by native code
    }
    var a = [];
    for (var i = 0; i < arguments.length; i++) {
        a.push(arguments[i]);
    }
    return a;
}

এর নাম ECMAScript 5 যেহেতু , Function.prototype.apply(thisArg, argsArray)তার দ্বিতীয় প্যারামিটার হিসাবে একটি হাঁসের টাইপ অ্যারের মত বস্তু গ্রহণ করে। আমরা যদি প্রার্থনা করি Array.apply(null, { length: N })তবে তা কার্যকর হবে

function Array() {
    var a = [];
    for (var i = 0; i < /* arguments.length = */ N; i++) {
        a.push(/* arguments[i] = */ undefined);
    }
    return a;
}

এখন আমাদের একটি এন- এলিমেন্ট অ্যারে রয়েছে, প্রতিটি উপাদান সেট করা আছে undefined। আমরা যখন .map(callback, thisArg)এটিতে কল করব তখন প্রতিটি উপাদান ফলাফলের জন্য সেট করা হবে callback.call(thisArg, element, index, array)। অতএব, [undefined, undefined, …, undefined].map(Number.call, Number)প্রতিটি উপাদান ম্যাপ করবে (Number.call).call(Number, undefined, index, array), যা একই Number.call(undefined, index, array), যা আমরা পূর্বে পর্যবেক্ষণ, মূল্যায়ন index। এটি অ্যারের সম্পূর্ণ করে যার উপাদানগুলি তাদের সূচক হিসাবে একই।

ন্যায়বিচারের Array.apply(null, {length: N})পরিবর্তে কেন ঝামেলা সহ্য করবেন Array(N)? সর্বোপরি, উভয় এক্সপ্রেশনই অপরিজ্ঞাত উপাদানগুলির একটি এন- এলিমেন্ট অ্যারের ফলাফল করবে । পার্থক্যটি হ'ল পূর্বের অভিব্যক্তিগুলিতে প্রতিটি উপাদান সুস্পষ্টভাবে অনির্ধারিত হিসাবে সেট করা থাকে, তবে পরবর্তীকালে প্রতিটি উপাদান কখনও সেট করা যায়নি। এর ডকুমেন্টেশন অনুযায়ী .map():

callbackকেবলমাত্র অ্যারের সূচকগুলির জন্য অনুরোধ করা হয়েছে যা নির্ধারিত মানগুলি দিয়েছে; এটি মুছে ফেলা হয়েছে বা যা কখনও মান নির্ধারিত হয় নি এমন সূচিগুলির জন্য অনুরোধ করা হয়নি।

অতএব, Array(N)অপর্যাপ্ত; Array(N).map(Number.call, Number)দৈর্ঘ্য এন এর একটি অবিবেচনাযুক্ত অ্যারেতে ফলত ।

সঙ্গতি

যেহেতু এই কৌশলটি Function.prototype.apply()ECMAScript 5 তে বর্ণিত আচরণের উপর নির্ভর করে , তাই এটি Chrome- 14 এবং ইন্টারনেট এক্সপ্লোরার 9 এর মতো প্রাক-ECMAScript 5 ব্রাউজারগুলিতে কাজ করবে না


62
চতুরতার জন্য +1 তবে দয়া করে নোট করুন এটি লুপের জন্য আদিম চেয়ে মাত্রার স্লুয়ারের আদেশ: jsperf.com/array-magic-vs- for
warpech

7
খুব চতুর - সম্ভবত খুব তাই। সত্য যে শোষণ Function.prototype.callএর প্রথম PARAM হয় thisসরাসরি উপর ম্যাপ বস্তুর Array.prototype.map's পুনরুক্তিকারীর প্যারামিটার এটি একটি নির্দিষ্ট প্রতিভা আছে।
নোহ

14
এটি সত্যই, সত্যই চালাক (জেএসকে অপব্যবহারের সীমানা)। এখানে সত্যই গুরুত্বপূর্ণ অন্তর্দৃষ্টি হ'ল mapআমার মতে অনাইন্ড করা মানগুলির আইডিয়াসিনক্র্যাসি। আরেকটি সংস্করণ (এবং সম্ভবত সামান্য আর যদিও পরিষ্কার,) হল: Array.apply(null, { length: N }).map(function(element, index) { return index; })
বেন রেইচ

6
@ বেনরিচ আরও ভাল (জেএস অপব্যবহারের স্তরের দিক থেকে): Array.apply(null, new Array(N)).map(function(_,i) { return i; }) বা, এস 6 এবং তীর ফাংশনগুলির ক্ষেত্রে, এমনকি আরও ছোট: Array.apply(null, new Array(N)).map((_,i) => i)
অদ্ভুত

1
যদি এটি 1 এ শুরু হওয়া কোনও অ্যারের ফিরিয়ে দেয় তবে এটি আসলে
হাই ফান

478

ES6 ব্যবহার করে একাধিক উপায়

স্প্রেড অপারেটর ( ...) এবং কী পদ্ধতি ব্যবহার করে

[ ...Array(N).keys() ].map( i => i+1);

ভরাট / ম্যাপ

Array(N).fill().map((_, i) => i+1);

Array.from

Array.from(Array(N), (_, i) => i+1)

অ্যারে.ফ্রম এবং { length: N }হ্যাক

Array.from({ length: N }, (_, i) => i+1)

সাধারণীকরণ ফর্ম সম্পর্কে নোট

পরিবর্তন করে প্রায় কাছাকাছি কোন পছন্দসই মান ইনিশিয়ালাইজ উৎপন্ন অ্যারে উপরে সব ধরনের i+1(যেমন প্রয়োজনীয় এক্সপ্রেশন i*2, -i, 1+i*2, i%2এবং ইত্যাদি)। যদি কোনও ক্রিয়া দ্বারা অভিব্যক্তি প্রকাশ করা fযায় তবে প্রথম রূপটি সরল হয়ে যায়

[ ...Array(N).keys() ].map(f)

উদাহরণ:

Array.from({length: 5}, (v, k) => k+1); 
// [1,2,3,4,5]

যেহেতু অ্যারে undefinedপ্রতিটি অবস্থানের সাথে আরম্ভ করা হয় তাই এর মান v হবেundefined

সমস্ত ফর্ম প্রদর্শন উদাহরণ

কাস্টম initialiser ফাংশন আরো জেনেরিক উদাহরণ fঅর্থাত

[ ...Array(N).keys() ].map((i) => f(i))

বা এমনকি সহজ

[ ...Array(N).keys() ].map(f)


33
সেরা উত্তর আইএমএইচও। আরও দেখুন developer.mozilla.org/de/docs/Web/JavaScript/Reference/...
le_m

5
0 থেকে শুরু হওয়া অ্যারেগুলির জন্য K ++ ব্যবহার করুন
বোর্জবয়

1
আপনি যদি বৃদ্ধি করতে চান তবে ব্যবহার করবেন না k++, ব্যবহার করুন ++k
অ্যালেক্স

4
সাবধান থাকুন অ্যারে.ফর্ম আইই তে সমর্থিত নয়, যদি না আপনি এটি পলি-ফিল করছেন।
লরেন

2
টিএস সংকলককে খুশি করতে অব্যক্ত প্যারামটি লোডাশের পরিবর্তে বিবেচনা করুন: অ্যারে.ফ্রম ({দৈর্ঘ্য: 5}, (_, কে) => কে + 1);
যাত্রা কর্নার

296

অ্যারেগুলি তাদের দৈর্ঘ্য সহজাতভাবে পরিচালনা করে। তারা যেমন ট্র্যাভারসড হয়, তাদের সূচিগুলি স্মৃতিতে ধরে রাখা যায় এবং সেই সময়ে উল্লেখ করা যায়। যদি কোনও এলোমেলো সূচী জানা প্রয়োজন, indexOfপদ্ধতিটি ব্যবহার করা যেতে পারে।


এটি বলেছে, আপনার প্রয়োজনের জন্য আপনি কেবল একটি নির্দিষ্ট আকারের অ্যারে ঘোষণা করতে চাইতে পারেন:

var foo = new Array(N);   // where N is a positive integer

/* this will create an array of size, N, primarily for memory allocation, 
   but does not create any defined values

   foo.length                                // size of Array
   foo[ Math.floor(foo.length/2) ] = 'value' // places value in the middle of the array
*/


ES6

ছড়িয়ে পড়া

স্প্রেড অপারেটর ( ...) এবং keysপদ্ধতি ব্যবহার করা আপনাকে সূচকগুলি তৈরি করতে আকারের N এর একটি অস্থায়ী অ্যারে তৈরি করতে সক্ষম করে এবং তারপরে একটি নতুন অ্যারে যা আপনার ভেরিয়েবলের জন্য বরাদ্দ করতে পারে:

var foo = [ ...Array(N).keys() ];

ভরাট / ম্যাপ

আপনি প্রথমে আপনার প্রয়োজনীয় অ্যারের আকার তৈরি করতে পারবেন, এটি অপরিজ্ঞাত করে পূরণ করুন এবং তারপরে একটি নতুন অ্যারে ব্যবহার করে তৈরি করতে পারেন map, যা প্রতিটি উপাদানকে সূচকে সেট করে।

var foo = Array(N).fill().map((v,i)=>i);

Array.from

এটি আকারের N এর দৈর্ঘ্যে আরম্ভ করতে হবে এবং এক পাসে অ্যারেটি স্থাপন করা উচিত।

Array.from({ length: N }, (v, i) => i)



মন্তব্য এবং বিভ্রান্তির পরিবর্তে, আপনি যদি উপরের উদাহরণগুলিতে 1.NN থেকে মানগুলি সত্যই ক্যাপচার করতে চান তবে কয়েকটি বিকল্প রয়েছে:

  1. যদি সূচকটি উপলভ্য থাকে তবে আপনি এটিকে কেবল এক দ্বারা বৃদ্ধি করতে পারেন (যেমন, ++i)।
  2. যে ক্ষেত্রে সূচি ব্যবহার করা হয় না - এবং সম্ভবত আরও কার্যকর উপায় হ'ল আপনার অ্যারে তৈরি করা কিন্তু এনকে এন + 1 উপস্থাপন করা, তারপরে সামনের অংশটি সরিয়ে নেওয়া।

    আপনি যদি 100 নম্বর চান তবে:

    let arr; (arr=[ ...Array(101).keys() ]).shift()





আমি বিশ্বাস করি যে যখন সংখ্যার অ্যারেটি এমন ডেটার জন্য ব্যবহার করা হয় যা গ্রহণের শেষে প্রক্রিয়া করা যায় না। (এইচটিএমএল টেমপ্লেটের মতো যা কেবলমাত্র মানগুলি প্রতিস্থাপন করে।)
নীল মনরো

কেউ কেন এটি করবে তা হ'ল একটি ড্রপডাউন তালিকা তৈরি করার জন্য সংখ্যার একটি অ্যারে রাখুন, ব্যবহারকারীকে 1 থেকে 10 পর্যন্ত পছন্দ দিন giving [1,2,3 ... 10] হাত দিয়ে একটি ছোট অ্যারেটি বুদ্ধিমান করুন, তবে কী হবে এটা 1 থেকে 50? শেষ সংখ্যা পরিবর্তন হলে কী হবে?
সিগারডুগ

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

4
আমি যেমন বলেছি, আমার 1 থেকে 10 নম্বর দিয়ে একটি ড্রপডাউন পপুলি করা দরকার That's সবই। এখানে একটি ইউসকেস, এমওয়াই ইউজকেস রয়েছে। এই পৃষ্ঠাটি আমি এইভাবে খুঁজে পেয়েছি। সুতরাং হাতে হাতে অ্যারে তৈরি করা আমি এখানে যা দেখলাম তার চেয়ে কম জটিল ছিল। সুতরাং আমার প্রয়োজনীয়তাগুলি ওপি এর প্রয়োজনীয়তা নয়। তবে আমার কাছে আমার উত্তর আছে।
সিগারডুগ

1
@ ভোলআরন এখানে একটি ইউসকেস রয়েছে, আমারও একটি রয়েছে। কৌণিকভাবে, পেজিংয়ে আমি পাদলেখগুলিতে ক্লিকযোগ্য are সুতরাং আমি * এনজিফোর্ড = "পেজ অব পেইউস কাউন্টার" দিয়ে একটি ভিউতে উপাদানগুলি লুপ করছি। আপনার কি এর চেয়ে ভাল সমাধান আছে? বিটিডাব্লু, স্ট্যাকওভারফ্লো.com
Qestions/

186

ES6 এ আপনি করতে পারেন:

Array(N).fill().map((e,i)=>i+1);

http://jsbin.com/molabiluwa/edit?js,console

সম্পাদনা: আপনি প্রশ্নটি আপডেট Array(45)করার Array(N)পরে পরিবর্তিত হয়েছে ।

console.log(
  Array(45).fill(0).map((e,i)=>i+1)
);


3
+1 কারণ এটি দুষ্টু সংস্করণের চেয়ে সম্পূর্ণ বড় হে.join.split - তবে এখনও আমি মনে করি নম্র লুপটি আরও ভাল।
রবিন

আমি @ রবিনকে সম্মত করি - অ্যালগোরিদমিক জটিলতা একদিকে রেখে, নম্র লুপটি সর্বদা আরও পঠনযোগ্য। তবে জাভাতে ল্যাম্বডাসের আবির্ভাবের সাথে সাথে আমি মনে করি mapখুব শীঘ্রই এই জাতীয় জিনিসের জন্য একটি স্ট্যান্ডার্ড হয়ে উঠবে।
নাট

4
const gen = N => [...(function*(){let i=0;while(i<N)yield i++})()]
রবিন

8
কেন দরকার তা বুঝতে পারছি না .fill()। আমি দেখতে পাচ্ছি যে আমি যখন নোডের রেপেল পরীক্ষা করি, তবে যেহেতু Array(1)[0] === undefined, কলটি পূরণ করতে () কি পার্থক্য করে Array(1).fill(undefined)?
ডোমিনিক

11
আগ্রহী অন্য যে কোনও ব্যক্তির জন্য, অ্যারে (এন) এবং অ্যারে (এন) এর মধ্যে পার্থক্যটি পূরণ করুন () এখানে
ডমিনিক

108

খুব জনপ্রিয় অ্যান্ডস্কোর _.আরং পদ্ধতিটি ব্যবহার করুন

// _.range([start], stop, [step])

_.range(10); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11); // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5); // => [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1); //  => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0); // => []


অসাধারণ. আমাকে একটি বড় প্রকল্প দেখান যা যাইহোক আন্ডারস্কোর ব্যবহার করে না ...
এরেজ কোহেন

63
function range(start, end) {
    var foo = [];
    for (var i = start; i <= end; i++) {
        foo.push(i);
    }
    return foo;
}

তারপরে ডেকে আনা

var foo = range(1, 5);

জাভাস্ক্রিপ্টে এটি করার কোনও অন্তর্নির্মিত উপায় নেই, তবে এটির জন্য আপনাকে যদি একাধিক বার করার দরকার হয় তবে এটি তৈরি করতে একটি সঠিক বৈধ ইউটিলিটি ফাংশন।

সম্পাদনা: আমার মতে, নিম্নলিখিতটি আরও ভাল পরিসরের কাজ। আমি কেবল লিনকিউ দ্বারা পক্ষপাতদুষ্ট কারণেই, তবে আমি মনে করি এটি আরও ক্ষেত্রে এটি আরও কার্যকর। আপনার মাইলেজ পরিবর্তিত হতে পারে.

function range(start, count) {
    if(arguments.length == 1) {
        count = start;
        start = 0;
    }

    var foo = [];
    for (var i = 0; i < count; i++) {
        foo.push(start + i);
    }
    return foo;
}

2
আমি এই পছন্দ। আপনি যদি এটির সাথে অতিরিক্ত মাইল যেতে চেয়েছিলেন তবে আপনি এটিকে অ্যারে.প্রোটোটাইপ.আরेंज = ফাংশন (শুরু, শেষ) হিসাবে ঘোষণা করতে পারেন {...} ;. তারপরে, আপনি যে কোনও অ্যারে অবজেক্টে রেঞ্জ (x, y) কল করতে পারেন।
জাচ রেটনার

8
পরিবর্তে এটি কোনও পদ্ধতি হিসাবে Arrayতৈরি করুন Array.prototypeকারণ কোনও অ্যারে নেই (এটি এমনকি বোবা হিসাবে বিবেচিত হতে পারে) প্রতিটি অ্যারেতে এই পদ্ধতিটি রয়েছে।
adamse

9
Array.range(1, 5)সম্ভবত আরও উপযুক্ত হতে পারে, তবে লেখার বিষয়ে একরকম দুর্দান্ত [].range(1, 5)
MooGoo

"বরং এটি অ্যারের পরিবর্তে অ্যারের একটি পদ্ধতি করুন। প্রোটোটাইপ" - পার্থক্য কী? আপনি কেবল একটি নির্দিষ্ট অ্যারে বলতে চাইছেন?
পিলাউ

3
@ পিলাউ যেমন অ্যাডামেস বলেছেন, এটি অদ্ভুত দেখাচ্ছে looks যদি এটি প্রোটোটাইপে থাকে তবে আপনি বলতে পারেন foo = [1, 2, 3]; bar = foo.range(0, 10);। তবে এটি ঠিক ... বিভ্রান্তিকর। bar = Array.range(0, 10)আরও অনেক স্পষ্ট এবং স্পষ্ট। পরিসীমাটির উদাহরণটির সাথে কোনও সম্পর্ক নেই, সুতরাং এটির উদাহরণ পদ্ধতি তৈরি করার কোনও কারণ নেই।
ইয়ান হেনরি

53

Arrayভি 8 পূরণ করার দ্রুততম উপায় হ'ল:

[...Array(5)].map((_,i) => i);

ফলাফল হবে: [0, 1, 2, 3, 4]


অতিরিক্ত পরিবর্তনশীল ছাড়াই এটি করার কোনও উপায় আছে _
নীলজাইকে

@ ব্লুজায়কে নং :(
dlex dykyі

কঠোর, আপনি কি জানেন। মানচিত্রের উত্স কোডটি কী? আমি নিশ্চিত নই যে এটি লুপের চেয়ে কোনও দ্রুততর কিনা, তবে তা না হলে তাত্ত্বিকভাবে আমরা কেবল প্রপার্টিটি সংজ্ঞায়িত করতে পারি এবং একটি নতুন তৈরি করতে পারি
নীলজাইকে

49

এই প্রশ্নের অনেক জটিল উত্তর রয়েছে তবে একটি সাধারণ ওয়ান-লাইনার:

[...Array(255).keys()].map(x => x + 1)

এছাড়াও উপরেরটি লেখার জন্য সংক্ষিপ্ত (এবং ঝরঝরে) হলেও, আমি মনে করি নিম্নলিখিতটি কিছুটা দ্রুত (সর্বোচ্চ দৈর্ঘ্যের জন্য):

127, ইন্ট 8,

255, Uint8,

32,767, ইন্ট 16,

65,535, UIN16,

2,147,483,647, ইন্ট 32,

4,294,967,295, ইউন্ট 32।

( সর্বাধিক পূর্ণসংখ্যার মানগুলির উপর ভিত্তি করে ), টাইপড অ্যারেগুলির জন্য এখানে আরও রয়েছে :

(new Uint8Array(255)).map(($,i) => i + 1);

যদিও এই সমাধানটিও তেমন আদর্শ নয়, কারণ এটি দুটি অ্যারে তৈরি করে এবং অতিরিক্ত পরিবর্তনশীল ঘোষণা "$" ব্যবহার করে (নিশ্চিত না যে এই পদ্ধতিটি ব্যবহার করে এটির কাছাকাছি যাওয়ার কোনও উপায় নেই)। আমি মনে করি নিম্নলিখিত সমাধানগুলি এটি করার নিখুঁত দ্রুততম উপায়:

for(var i = 0, arr = new Uint8Array(255); i < arr.length; i++) arr[i] = i + 1;

এই বিবৃতিটি তৈরির পরে যে কোনও সময় আপনি বর্তমান স্কোপটিতে ভেরিয়েবল "আরার" ব্যবহার করতে পারেন;

আপনি যদি এটির বাইরে কিছু সাধারণ ক্রিয়াকলাপ করতে চান (কিছু প্রাথমিক যাচাইকরণ সহ):

function range(min, max) {
    min = min && min.constructor == Number ? min : 0;
    !(max && max.constructor == Number && max > min) && // boolean statements can also be used with void return types, like a one-line if statement.
        ((max = min) & (min = 0));  //if there is a "max" argument specified, then first check if its a number and if its graeter than min: if so, stay the same; if not, then consider it as if there is no "max" in the first place, and "max" becomes "min" (and min becomes 0 by default)

    for(var i = 0, arr = new (
        max < 128 ? Int8Array : 
        max < 256 ? Uint8Array :
        max < 32768 ? Int16Array : 
        max < 65536 ? Uint16Array :
        max < 2147483648 ? Int32Array :
        max < 4294967296 ? Uint32Array : 
        Array
    )(max - min); i < arr.length; i++) arr[i] = i + min;
    return arr;
}



//and you can loop through it easily using array methods if you want
range(1,11).forEach(x => console.log(x));

//or if you're used to pythons `for...in` you can do a similar thing with `for...of` if you want the individual values:
for(i of range(2020,2025)) console.log(i);

//or if you really want to use `for..in`, you can, but then you will only be accessing the keys:

for(k in range(25,30)) console.log(k);

console.log(
    range(1,128).constructor.name,
    range(200).constructor.name,
    range(400,900).constructor.name,
    range(33333).constructor.name,
    range(823, 100000).constructor.name,
    range(10,4) // when the "min" argument is greater than the "max", then it just considers it as if there is no "max", and the new max becomes "min", and "min" becomes 0, as if "max" was never even written
);


সুতরাং, উপরের ফাংশনটির সাথে উপরের সুপার-ধীর "সাধারণ এক-লাইনার" অতি দ্রুত, এমনকি আরও খাটো হয়ে যায়:

range(1,14000);

@ জেভিজি কিন্তু দ্রুত ফাংশনের জন্য নয়?
নীলজয়কে 9:59

ঠিক তাই. এটি এই সাধারণ একটি লাইনার সবাই খুঁজছেন!
সুপারশন

@ সুপারসান যদিও এর দুর্দান্ত ধীর :)
ব্লুজায়কে

নতুন fillপদ্ধতির সাথে আধুনিক জাভাস্ক্রিপ্ট :Array(255).fill(0,0,255)
ককোডার

@ ক্যাকোডার এটি কত দ্রুত, এটি কত অ্যারে তৈরি করে এবং কতগুলি পুনরাবৃত্তি করে?
নীলজাইকে

42

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

new Array(/*any number which you want*/)
    .join().split(',')
    .map(function(item, index){ return ++index;})

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

new Array(10)
    .join().split(',')
    .map(function(item, index){ return ++index;})

নিম্নলিখিত অ্যারে তৈরি করবে:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

এছাড়াও, কেন না new Array(10).join().split(',').map(function() {return ++arguments[1]});?
সুপার

1
@ মারপ্লিক্স কিছু ক্ষেত্রে ভিতরে আর্গুমেন্ট নিয়ে কাজ করে জেএস ইঞ্জিন দ্বারা অনুকূলিত করা হবে না (ভি 8 এর ক্ষেত্রেও সত্য, দেখুন jsperf.com/arguments-vs-array-argument/2 )
nktssh

4
এটি একটি আকর্ষণীয় সমাধান তবে এটি সম্পূর্ণ অবৈধ - 3 বার অ্যারে পার্স করা (একবার join, একবার splitএবং একবার আপনি যে জিনিসটি করতে চান) কেবল তা দুর্দান্ত নয় - আমি জানি তারা মনে হয় যে এগুলি অনুগ্রহের বাইরে পড়েছে seem কোনও কারণে, তবে কেবলমাত্র একটি ভাল পুরানো ফ্যাশন লুপ ব্যবহার করা আরও ভাল !
রবিন

42

ES6 এটি কৌশলটি করবে:

[...Array(12).keys()]

ফলাফলটি দেখুন:

[...Array(12).keys()].map(number => console.log(number))


5
প্রকৃতপক্ষে, তারা 0.N-1 নয়, 0.N-1
12:

1
হ্যাঁ, [...Array(N + 1).keys()].slice(1)উত্পাদিত হবে 1..N
ডেভিড জি

কোনও কারণে এই সমাধানটি এক্সপো (প্রতিক্রিয়া-নেটিভ) অ্যাপ্লিকেশন থেকে প্রযোজনা সংস্করণে কাজ করে না। [...Array(N + 1).keys()]এই কোডটি খালি অ্যারে প্রদান করে তবে কেবল উত্পাদন মোডে, উন্নয়ন মোডের কাজগুলি ব্যবহার করে using
ফ্যাবিয়ানোথর

3
.keys()উত্তর ইতিমধ্যে দেওয়া হয়েছিল বছর পূর্বে এবং 500+ upvotes হয়েছে। আপনার উত্তর এতে কী যুক্ত করে?
ড্যান ড্যাসক্লেস্কু

39

যদি আপনি আমার অ্যাপ্লিকেশনটিতে d3.js ব্যবহার করছেন বলে মনে হয়, ডি 3 একটি সহায়ক ফাংশন সরবরাহ করে যা এটি আপনার জন্য করে।

সুতরাং 0 থেকে 4 এ অ্যারে পেতে এটি এতটা সহজ:

d3.range(5)
[0, 1, 2, 3, 4]

এবং আপনার অনুরোধ অনুসারে 1 থেকে 5 পর্যন্ত অ্যারে পেতে:

d3.range(1, 5+1)
[1, 2, 3, 4, 5]

পরীক্ষা করে দেখুন এই টিউটোরিয়াল আরও তথ্যের জন্য।


এই মন্তব্যটি আমাকে রামদাজেএসে () ফাংশনটি সন্ধান করার ধারণা দিয়েছে , যা আমার বর্তমান প্রকল্পে আমি জেএস লাইব্রেরি নিয়ে কাজ করছি। পারফেক্ট।
মরফ্যাটিক

39

ES2015 / ES6 স্প্রেড অপারেটর ব্যবহার করে

[...Array(10)].map((_, i) => i + 1)

console.log([...Array(10)].map((_, i) => i + 1))


7
i + 1তুলনায় আরও বুদ্ধি করতে হবে ++i
ভিনসেন্ট ক্যান্টিন

38

এটি সম্ভবত সংখ্যার অ্যারে তৈরির দ্রুততম উপায়

সংক্ষিপ্ততম

var a=[],b=N;while(b--)a[b]=b+1;

সঙ্গতিপূর্ণভাবে

var arr=(function(a,b){while(a--)b[a]=a;return b})(10,[]);
//arr=[0,1,2,3,4,5,6,7,8,9]

আপনি যদি 1 থেকে শুরু করতে চান

var arr=(function(a,b){while(a--)b[a]=a+1;return b})(10,[]);
//arr=[1,2,3,4,5,6,7,8,9,10]

একটি ফাংশন চান?

function range(a,b,c){c=[];while(a--)c[a]=a+b;return c}; //length,start,placeholder
var arr=range(10,5);
//arr=[5,6,7,8,9,10,11,12,13,14]

কেন?

  1. while দ্রুততম লুপ হয়

  2. ডাইরেক্ট সেটিং এর চেয়ে দ্রুত push

  3. [] তুলনায় দ্রুত new Array(10)

  4. এটি সংক্ষিপ্ত ... প্রথম কোডটি দেখুন। তারপরে এখানে অন্যান্য সমস্ত ফাংশনটি দেখুন।

ছাড়া বাঁচতে পারি না আপনি যদি চান তাহলে জন্য

for(var a=[],b=7;b>0;a[--b]=b+1); //a=[1,2,3,4,5,6,7]

অথবা

for(var a=[],b=7;b--;a[b]=b+1); //a=[1,2,3,4,5,6,7]

8
এই দাবিকে বেঞ্চমার্ক সহ ব্যাক আপ করা ভাল। Jsperf.com চেষ্টা করুন ।
ম্যাট বল

2
তোমার jsperf ... অনুগ্রহ ম্যাট শুধু beacuse আপনি আমার উত্তর স্টপ আমার অন্যদের downvoting ... পছন্দ না stackoverflow.com/a/18344296/2450730 ... ব্যবহার console.time () বা কিভাবে এটি বলা হচ্ছে ... না jsperf ।
কোকো

4
এফওয়াইআই: জন রেসিগ কয়েক বছর আগে প্রথম প্রকাশিত হিসাবে - কিছু প্ল্যাটফর্মে (উইন্ডোজ: পি) প্রতি 16 মিনিটে একবার ব্রাউজারে সময় দেওয়া হচ্ছে। এছাড়াও মাল্টিটাস্কিং পরিবেশে সম্পাদনের সময় পরিমাপের সাথে অন্যান্য সমস্যা রয়েছে। jsperf.com পরীক্ষাগুলি চালানো বাস্তবায়ন করেছে যাতে তারা পরিসংখ্যানগতভাবে সঠিক হয়। console.time()একটি অন্তর্দৃষ্টি পেতে চালানো ঠিক আছে , তবে একটি প্রমাণের জন্য আপনার jsperf.com প্রয়োজন এবং এটি আপনাকে অন্য লোকদের (বিভিন্ন হার্ডওয়্যার ইত্যাদি) থেকে ক্রস ব্রাউজারের ফলাফল দেখায়
naugtur

3
@ কোকো এটি ভুল:var a=[],b=N;while(b--){a[b]=a+1};
ভিনটেজএক্সভ

5
@ কোকো— যখন অন্য লুপগুলির চেয়ে সবসময় দ্রুত হয় না । কিছু ব্রাউজারগুলিতে, লুপের জন্য হ্রাস হ্রাসের জন্য লুপের চেয়ে ধীর গতির, আপনি জাভাস্ক্রিপ্টের সম্পাদনা সম্পর্কে সাধারণ বিবৃতি দিতে পারবেন না কারণ সেখানে অনেকগুলি বিভিন্ন অপটিমাইজেশন রয়েছে। তবে, সাধারণভাবে আমি আপনার পদ্ধতির পছন্দ করি। ;-)
রবজি

32

ভরাট করার নতুন উপায় Arrayহ'ল:

const array = [...Array(5).keys()]
console.log(array)

ফলাফল হবে: [0, 1, 2, 3, 4]


এটি সত্যিই ভাল উত্তর, যদিও কৌশলগতভাবে প্রশ্নটি 1-এন থেকে হয়েছিল, 0- (এন -1)
নীলজয়কে

31

আপনি lodash ব্যবহার করে থাকেন, আপনি ব্যবহার করতে পারেন _.range :

_.range([start=0], end, [step=1])

শুরু থেকে প্রগতিশীল সংখ্যার অ্যারে (ধনাত্মক এবং / বা নেতিবাচক) তৈরি করে তবে শেষ হয় না including কোনও প্রান্ত বা পদক্ষেপ ছাড়াই negativeণাত্মক শুরু নির্দিষ্ট করা থাকলে -1 এর একটি পদক্ষেপ ব্যবহৃত হয়। যদি শেষটি নির্দিষ্ট না করা থাকে তবে এটি শুরু দিয়ে সেট করা হবে তারপর 0 তে সেট করুন।

উদাহরণ:

_.range(4);
// ➜ [0, 1, 2, 3]

_.range(-4);
// ➜ [0, -1, -2, -3]

_.range(1, 5);
// ➜ [1, 2, 3, 4]

_.range(0, 20, 5);
// ➜ [0, 5, 10, 15]

_.range(0, -4, -1);
// ➜ [0, -1, -2, -3]

_.range(1, 4, 0);
// ➜ [1, 1, 1]

_.range(0);
// ➜ []

30

ES6 এর সাহায্যে আপনি এটি করতে পারেন:

// `n` is the size you want to initialize your array
// `null` is what the array will be filled with (can be any other value)
Array(n).fill(null)

যেহেতু অ্যারের মানগুলি এই সমাধানটি ব্যবহার করে বাস্তবে পূরণ করা হয়, mapএবং forEachকাজ করবে।
ডিসেম্বর

26

চূড়ান্ত সংক্ষিপ্তসার প্রতিবেদন .. Drrruummm রোল -

এটি ES6 ব্যবহার না করে আকারের অ্যারে (এখানে 10) আরে তৈরি করার সবচেয়ে সংক্ষিপ্ত কোড । উপরের কোকোর সংস্করণটি নিকটে তবে সংক্ষিপ্ততম নয়।

(function(n){for(a=[];n--;a[n]=n+1);return a})(10)

কিন্তু এই কোড গল্ফের অবিসংবাদিত বিজয়ী (সোর্স কোডের খুব কম বাইটে একটি নির্দিষ্ট সমস্যা সমাধানের প্রতিযোগিতা) হলেন নিকো রুওতসালাইনেন । অ্যারে কনস্ট্রাক্টর এবং ES6 স্প্রেড অপারেটর ব্যবহার করে । (বেশিরভাগ ES6 সিনট্যাক্সটি বৈধ টাইপস্ক্রিপ্ট, তবে নিম্নলিখিতটি নিখরচায় নয়। সুতরাং এটি ব্যবহার করার সময় বিবেচনা করুন)

[...Array(10).keys()]

ভোট কেন? দীর্ঘ উত্তরের তালিকা অনুসরণ করা শক্ত, সুতরাং সংক্ষেপের কথা ভাবা।
sapy

এই 0-10 না? [... অ্যারে (10)। কিকেস ()]
গ্রেগ

ওয়েবস্টর্ম পরামর্শ দেয় (নতুন অ্যারে (10))। কী (), এটি কি ঠিক?
ছেলে

(নতুন অ্যারে (10))। কীগুলি (), অ্যারে না করে অ্যারেআইট্রেটারকে rator returns প্রদান করে
নিরাপদ

এটি একটি বৈশ্বিক পরিবর্তনশীল তৈরি করে a। লুপটি হওয়া উচিতfor(var a=[];n--;a[n]=n+1)
কুবের

20

ES6 এ আর একটি উপায় রয়েছে যা অ্যারে.ফর্ম ব্যবহার করে 2 টি আর্গুমেন্ট নেয়, প্রথমটি একটি অ্যারে লাইক (এক্ষেত্রে lengthসম্পত্তি সহ একটি বস্তু ), এবং দ্বিতীয়টি ম্যাপিং ফাংশন (এই ক্ষেত্রে আমরা আইটেমটিকে তার সূচকে ম্যাপ করি)

Array.from({length:10}, (v,i) => i)

এটি খাটো এবং এটি অন্যান্য সংখ্যাগুলির মতো এমনকি সংখ্যার উত্পন্ন করার জন্য ব্যবহার করা যেতে পারে

Array.from({length:10}, (v,i) => i*2)

এছাড়াও এটি অন্যান্য উপায়গুলির চেয়ে ভাল পারফরম্যান্স করে কারণ এটি একবারে অ্যারের মাধ্যমে একবার লুপ হয়। কিছু তুলনার জন্য স্নিপিট পরীক্ষা করুন

// open the dev console to see results

count = 100000

console.time("from object")
for (let i = 0; i<count; i++) {
  range = Array.from({length:10}, (v,i) => i )
}
console.timeEnd("from object")

console.time("from keys")
for (let i =0; i<count; i++) {
  range = Array.from(Array(10).keys())
}
console.timeEnd("from keys")

console.time("apply")
for (let i = 0; i<count; i++) {
  range = Array.apply(null, { length: 10 }).map(function(element, index) { return index; })
}
console.timeEnd("apply")


আরে এটা খুব সুন্দর, আমি এটি পছন্দ করি তবে এটি ওপি প্রত্যাশিত ফলাফল ফিরিয়ে দেয় না। এটি করার জন্য এটি লিখতে হবেArray.from({length:N}, (v,i) => i+1)
CervEd


16

=>ES6 স্ট্যান্ডার্ড থেকে নতুন অ্যারে পদ্ধতি এবং ফাংশন সিনট্যাক্স ব্যবহার করা (কেবল লেখার সময় ফায়ারফক্স)।

এর সাথে গর্ত পূরণ করে undefined:

Array(N).fill().map((_, i) => i + 1);

Array.fromপালাক্রমে "গহ্বর" মধ্যে undefined, যাতে Array.mapআশানুরূপ কাজ করে:

Array.from(Array(5)).map((_, i) => i + 1)

7
একইভাবে, আপনার কাছে ES6 মধ্যে নিম্নলিখিতগুলি করতে পারেন: Array.from({length: N}, (v, k) => k)
XåpplI'-I0llwlg'I -

এক্সপ্ললির পদ্ধতিকে অগ্রাধিকার দেওয়া হয়েছে: অ্যারে.ফ্রোম প্রায় সঠিক এই দৃশ্যের জন্য তৈরি হয়েছিল এবং এটি ম্যাপিং কলব্যাককে বোঝায়। অ্যারে-জাতীয় কিছুতে অ্যারে পদ্ধতিগুলি ব্যবহার করতে ইচ্ছুক না হওয়ার সাধারণ সমস্যার একটি দুর্দান্ত সমাধান Array.prototype.map.call, যেমন নোডলিস্টগুলি থেকে ফিরে আসা, যেমন ভার্জোজ পদ্ধতির অবলম্বন ছাড়াই document.querySelectorAllবিকাশকারী.মোজিলা.আর.ইন
ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স / /

আমি এটি বনাম আন্ডারস্কোর রেঞ্জের সিনট্যাক্সটি ওজন করছি এবং পরিসর আরও ভাল করে পড়ছে।
ooওলালা

প্রযুক্তিগতভাবে এটি এমন নয় Array.fromযা ছড়িয়ে ছিটিয়ে থাকা মানগুলি সংজ্ঞায়িত করে। বরং Array(5)আর্গুমেন্ট অবজেক্ট হিসাবে অভিহিত করা হয় যা
বিচ্ছুরিত



10

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

Array.fromদ্বিতীয় alচ্ছিক যুক্তি ব্যবহার করে :

অ্যারে.ফ্রম (অ্যারে লাইক [, মানচিত্রফাঁস [, এটিআরজি]])

আমরা খালি Array(10)অবস্থানগুলি থেকে সংখ্যাযুক্ত অ্যারে তৈরি করতে পারি :

Array.from(Array(10), (_, i) => i)

var arr = Array.from(Array(10), (_, i) => i);
document.write(arr);


এটি এর চেয়ে জটিল এবং 10x ডলার ধীর [...Array(11).keys()].slice(1)
ড্যান ড্যাসক্লেস্কু

10

দেখে মনে হচ্ছে একমাত্র গন্ধটি বর্তমানে উত্তরগুলির পরিবর্তে সম্পূর্ণ তালিকায় নেই যা হ'ল জেনারেটর বৈশিষ্ট্যযুক্ত; তাই প্রতিকার যে:

const gen = N => [...(function*(){let i=0;while(i<N)yield i++})()]

যা এইভাবে ব্যবহার করা যেতে পারে:

gen(4) // [0,1,2,3]

এ সম্পর্কে দুর্দান্ত জিনিসটি হ'ল আপনাকে কেবল বৃদ্ধি করতে হবে না ... @ আইগার-শুবিনের উত্তর থেকে অনুপ্রেরণা নিতে আপনি খুব সহজেই এলোমেলো একটি অ্যারে তৈরি করতে পারেন:

const gen = N => [...(function*(){let i=0;
  while(i++<N) yield Math.random()
})()]

আর অপারেশনিয়ালি ব্যয়বহুল দীর্ঘায়নের চেয়ে এর চেয়ে ভাল:

const slow = N => new Array(N).join().split(',').map((e,i)=>i*5)
// [0,5,10,15,...]

আপনি পরিবর্তে করতে পারে:

const fast = N => [...(function*(){let i=0;while(i++<N)yield i*5})()]

10

আপনি Es6 থেকে অ্যারে ফিল এবং মানচিত্র ব্যবহার করতে পারেন; ঠিক যেমন কয়েকজন লোক এই প্রশ্নের জন্য তাদের দেওয়া উত্তরগুলিতে পরামর্শ দিয়েছে। নীচে কয়েকটি উদাহরণ দেওয়া হল:

Example-One: Array(10).fill(0).map((e,i)=>i+1)

Result-One: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Example-Two: Array(100/10).fill(0).map((e,i)=>(i*10)+10)

Result-Two:[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

আমি এটিকে পছন্দ করি কারণ আমি এটিকে সরাসরি এগিয়ে এবং সহজ বলে মনে করি।



10

ES6 এ:

Array.from({length: 1000}, (_, i) => i);

ES5:

Array.apply(0, {length: 1000}).map(function(x,i){return i});

9

ES6 ব্যবহার করে

const generateArray = n => [...Array(n)].map((_, index) => index + 1);

ধন্যবাদ! এটি আমার মতে সবচেয়ে মার্জিত উত্তর ছিল! Array.from(Array(n))স্প্রেড অপারেটর সমর্থিত না হলে একটিও ব্যবহার করতে পারে ।
অমিত

প্রথমে আমি জানতাম না কেন আপনাকে স্প্রেড অপারেটরটি ব্যবহার করতে হবে, তবে তার পরে আমি mapএমডিএন- এ নিম্নলিখিতটি পড়েছি : "এটি অ্যারের উপাদানগুলি হারিয়ে যাওয়ার জন্য বলা হয় না (যা সূচকগুলি কখনও সেট করা হয়নি, যা আছে মুছে ফেলা হয়েছে বা যা কখনই কোনও মান নির্ধারিত হয়নি) "।
ব্যাটম্যানজ

9

Object.keys(Array.apply(0, Array(3))).map(Number)

রিটার্নস [0, 1, 2]ইগর শুবিনের দুর্দান্ত উত্তরের সাথে খুব মিল , তবে কিছুটা কম কৌতুকপূর্ণ (এবং একটি চরিত্র দীর্ঘতর)।

ব্যাখ্যা:

  • Array(3) // [undefined × 3]দৈর্ঘ্যের একটি অ্যারে তৈরি করুন = = 3। দুর্ভাগ্যক্রমে এই অ্যারেটি আমাদের কাছে প্রায় অকেজো, তাই আমাদের…
  • Array.apply(0,Array(3)) // [undefined, undefined, undefined]অ্যারে পুনরাবৃত্তিযোগ্য করুন। দ্রষ্টব্য: প্রয়োগের প্রথম আর্গ কিন্তু 0 এর সংক্ষিপ্ত হিসাবে নালটি আরও সাধারণ।
  • Object.keys(Array.apply(0,Array(3))) // ['0', '1', '2'] তারপরে অ্যারের কীগুলি (কাজ করে কারণ অ্যারে টাইপফ অ্যারে হ'ল কীগুলির সূচী সহ একটি বস্তু।
  • Object.keys(Array.apply(0,Array(3))).map(Number) // [0, 1, 2] এবং কীগুলিতে মানচিত্র রেখে স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.