অ্যারে আইটেমগুলি অন্য অ্যারেতে অনুলিপি করুন


916

আমার একটি জাভাস্ক্রিপ্ট অ্যারে রয়েছে dataArrayযা আমি একটি নতুন অ্যারেতে pushুকতে চাই newArray। বাদে আমি newArray[0]হতে চাই না dataArray। আমি সমস্ত আইটেমটি নতুন অ্যারেতে ঠেলাতে চাই:

var newArray = [];

newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...

বা আরও ভাল:

var newArray = new Array (
   dataArray1.values(),
   dataArray2.values(),
   // ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);

সুতরাং এখন নতুন অ্যারেটিতে পৃথক ডেটা অ্যারের সমস্ত মান রয়েছে। শর্টহ্যান্ডের মতো কি কিছু pushValuesউপলভ্য আছে তাই আমি প্রতিটি ব্যক্তির উপর dataArrayআইটেমগুলি একের পর এক যোগ করতে পারি না ?




উত্তর:


1246

কনক্যাট ফাংশনটি যেমন ব্যবহার করুন :

var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);

এর মান newArrayহবে [1, 2, 3, 4]( arrayAএবং arrayBঅপরিবর্তিত থাকবে; concatফলাফলের জন্য একটি নতুন অ্যারে তৈরি করে এবং প্রদান করে)।



15
আমি সম্মত হই যে পারফর্ম্যান্ট এক্সিকিউশনটি খুব সুন্দর। কিন্তু ঠিক সেই উদ্দেশ্যে বিন্যাসে কনটাক্ট করার জন্য সমঝোতা হয় না? সুতরাং এটি স্ট্যান্ডার্ড হওয়া উচিত । নাকি কনকটের সাথে আরও ভাল কিছু করার আছে? এবং এটি কেবল ব্রাউজারের জেএস ইঞ্জিনের খারাপ প্রয়োগের কারণে বা আপনি যেখানেই এটি ব্যবহার করছেন তা ধীর হতে পারে? এটি একদিন স্থির হতে পারে। আমি হ্যাকি স্পিড অপ্টিমাইজেশনের উপর কোড রক্ষণাবেক্ষণযোগ্যতা বেছে নেব। হুম ....
বিটারব্লু

3
এছাড়াও আমি কেবল পরিস্থিতিটি বেঞ্চমার্ক করেছি: কনক্যাট বনাম পুশ অ্যাপ্লিকেশন। Google Chrome: দ্রুত (কনক্যাট = বিজয়ী) Opera,: দ্রুত (কনক্যাট = বিজয়ী) IE,: ধীর (কনক্যাট = বিজয়ী) Firefox,: ধীর (পুশ.এপ্লি = বিজয়ী, ক্রোমের কনক্যাট থেকে 10 গুণ বেশি ধীর) ... খারাপ জেএস ইঞ্জিন বাস্তবায়নের কথা বলুন ।
বিটারব্লিউ

15
কীভাবে দু'জনকে একের সাথে অন্যের দিকে ঠেলে দেওয়া যায় তা গ্রহণযোগ্য উত্তরটিকে কীভাবে যুক্ত করা হচ্ছে ?! এগুলি দুটি ভিন্ন অপারেশন।
কাকাকোও

@kaqqao কারণ pushমানগুলির একটি অ্যারে সমতল করবে না। concatপ্রশ্নটি যা প্রয়োজন তা অর্জন করে।
ওয়াইজগুইএহ

644

শর্তাবলী যে আপনার অ্যারেগুলি বিশাল নয় (নীচে সাবধানতা অবলম্বন করুন), আপনি push()যে অ্যারেতে মানগুলি সংযোজন করতে চান তা ব্যবহার করতে পারেন । push()একাধিক পরামিতি নিতে পারে যাতে আপনি apply()কার্য পদ্ধতিগুলির পরামিতিগুলির তালিকা হিসাবে ধাক্কা দেওয়ার জন্য মানগুলির অ্যারেটি পাস করতে এর পদ্ধতিটি ব্যবহার করতে পারেন । এই ব্যবহার উপর সুবিধা আছে concat()জায়গায় অ্যারের উপাদান যোগ করার বদলে নতুন একটি অ্যারের তৈরি করার।

তবে, মনে হচ্ছে বড় অ্যারেগুলির জন্য (এক লক্ষ সদস্যের অর্ডার বা তার বেশি), এই কৌশলটি ব্যর্থ হতে পারে । এই জাতীয় অ্যারেগুলির জন্য, একটি লুপ ব্যবহার করা আরও ভাল পদ্ধতির। বিশদ জানতে https://stackoverflow.com/a/17368101/96100 দেখুন ।

var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);

আপনি এটি কোনও ক্রিয়ায় সাধারণীকরণ করতে চাইতে পারেন:

function pushArray(arr, arr2) {
    arr.push.apply(arr, arr2);
}

... অথবা এটির Arrayপ্রোটোটাইপে যুক্ত করুন:

Array.prototype.pushArray = function(arr) {
    this.push.apply(this, arr);
};

var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);

... বা push()একাধিক পরামিতি concat()যেমন push(), পছন্দ করে একাধিক পরামিতি ব্যবহার করে মুল পদ্ধতিটি অনুকরণ করুন :

Array.prototype.pushArray = function() {
    this.push.apply(this, this.concat.apply([], arguments));
};

var newArray = [];
newArray.pushArray(dataArray1, dataArray2);

আইআই <= 8 সহ বড় অ্যারে এবং সমস্ত বড় ব্রাউজারের জন্য উপযুক্ত এটির সর্বশেষ উদাহরণটির একটি লুপ-ভিত্তিক সংস্করণ:

Array.prototype.pushArray = function() {
    var toPush = this.concat.apply([], arguments);
    for (var i = 0, len = toPush.length; i < len; ++i) {
        this.push(toPush[i]);
    }
};

9
নোট: newArray.push.apply(newArray, dataArray1);একই দেয়Array.prototype.push.applay(newArray,dataArra1);

এটি কি পুরানো ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ?
ড্যামিয়েন Ó সিল্লাইঘ


1
@ ড্যামিয়েনসিলিলেহ: হ্যাঁ এটি ব্রাউজারগুলি আইই 6 6 এবং তারও আগের দিকে ফিরে যাওয়ার সাথে সামঞ্জস্যপূর্ণ।
টিম ডাউন

এটি দুর্বল প্রোগ্রামিং অনুশীলনের রূপকথা it Array.prototype.concatখারাপ নয়, বরং এটি কেবল ভুল বোঝাবুঝি এবং কখনও কখনও অপব্যবহার করা হয়। এই পরিস্থিতিতে এটি কেবল ভুল বোঝাবুঝি হয় তবে অপব্যবহার হয় না।
জ্যাক গিফিন

444

আমি আরও একটি "ভবিষ্যত-প্রমাণ" উত্তর যুক্ত করব

ECMAScript 6 এ, আপনি স্প্রেড সিনট্যাক্সটি ব্যবহার করতে পারেন :

let arr1 = [0, 1, 2];
let arr2 = [3, 4, 5];
arr1.push(...arr2);

console.log(arr1)

স্প্রেড সিনট্যাক্সটি এখনও সমস্ত বড় ব্রাউজারে অন্তর্ভুক্ত নেই। বর্তমানের সামঞ্জস্যের জন্য, এটি (ধারাবাহিকভাবে আপডেট হওয়া) সামঞ্জস্যতা সারণীটি দেখুন

তবে আপনি বাবেল.জেএস এর সাথে স্প্রেড সিনট্যাক্স ব্যবহার করতে পারেন ।

সম্পাদনা:

পারফরম্যান্স সম্পর্কে আরও মন্তব্যের জন্য নীচে জ্যাক গিফিনের জবাব দেখুন। মনে হচ্ছে কনটাক্ট এখনও স্প্রেড অপারেটরের চেয়ে ভাল এবং দ্রুত।


7
আপনি যদি টাইপস্ক্রিপ্ট ব্যবহার করে থাকেন তবে আপনি স্প্রেড অপারেটরও ব্যবহার করতে পারেন। আপনি যদি ইএস 5 লক্ষ্য করে থাকেন তবে এটি সংকলিত হবে newArray.apply(newArray, dataArray1)
এজে রিচার্ডসন

5
দ্রষ্টব্য: আপনি একটি তৃতীয় অ্যারের মধ্যে ফলাফলের প্রয়োজন হলে (সুতরাং arr1 পরিবর্তন না, যেমন প্রাথমিক প্রশ্ন প্রয়োজন করলো), আপনি কি করতে পারেন newArray = [... arr1 ... arr2]
অস্পষ্ট

ওহ আমি এটা জানতাম না। ধন্যবাদ। আমি একটি সম্পাদনা মন্তব্য যুক্ত করেছেন।
কারেল বালেক

অবিচ্ছিন্ন থাকার বোনাস (মূল অ্যারেটি পরিবর্তন করা) সহ কীভাবে কনক্যাট কাজ করবে তার অনুরূপ।
রব

@ আরবার্টমিল্ন স্প্রেড অপারেটর স্পষ্টতই মূল অ্যারেটি পরিবর্তন করে না, পরিবর্তে হতাশ হয়ে সমস্ত অ্যারে বিষয়বস্তুগুলির একটি নতুন অনুলিপি তৈরি করে।
জ্যাক গিফিন

145

এমডিএন থেকে একটি মার্জিত উপায় খুঁজে পেয়েছি

var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot'];

// Merge the second array into the first one
// Equivalent to vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);

console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot']

অথবা আপনি spread operatorES6 এর বৈশিষ্ট্যটি ব্যবহার করতে পারেন :

let fruits = [ 'apple', 'banana'];
const moreFruits = [ 'orange', 'plum' ];

fruits.push(...moreFruits); // ["apple", "banana", "orange", "plum"]

1
এই প্রশ্নটি যা চেয়েছিল তা নয়। প্রশ্নটি প্রতিবার একটি নতুন অ্যারে তৈরি করার উপায় জিজ্ঞাসা করছে, কোনও পুরানো অ্যারে সংশোধন করবে না।
জ্যাক গিফিন


13

নিম্নলিখিতটি আমার কাছে সবচেয়ে সহজ বলে মনে হচ্ছে:

var newArray = dataArray1.slice();
newArray.push.apply(newArray, dataArray2);

"ধাক্কা" ধীরে ধীরে যুক্তির সংখ্যক আর্গুমেন্ট নেয় তাই আপনি এর applyপদ্ধতিটি ব্যবহার করতে পারেনpush অন্য অ্যারের সমস্ত উপাদানকে পুশ ফাংশনটির । এটি তার প্রথম আর্গুমেন্ট ("newArray" এখানে) "এটি" এবং অ্যারের উপাদানগুলিকে অবশিষ্ট আর্গুমেন্ট হিসাবে ব্যবহার করে ধাক্কা দেওয়ার জন্য কল কল করে।

sliceপ্রথম বিবৃতি প্রথম অ্যারের একটি কপি পায়, তাই আপনি এটি পরিবর্তন করবেন না।

আপডেট আপনি যদি স্লাইভ উপলভ্য জাভাস্ক্রিপ্টের কোনও সংস্করণ ব্যবহার করেন তবে আপনি এই ভাবটি আরও সহজ করতে পারবেন push:

newArray.push(...dataArray2)

1
"দুটি অ্যারে মার্জ" এর উদাহরণ হিসাবে এমডিএন- তেও এখানে উল্লেখ করা হয়েছে
উইল্ট

12

নীচের ফাংশনটিতে অ্যারের দৈর্ঘ্য নিয়ে কোনও সমস্যা নেই এবং সমস্ত প্রস্তাবিত সমাধানের চেয়ে আরও ভাল সম্পাদন করা হয়েছে:

function pushArray(list, other) {
    var len = other.length;
    var start = list.length;
    list.length = start + len;
    for (var i = 0; i < len; i++ , start++) {
        list[start] = other[i];
    }
}

দুর্ভাগ্যক্রমে, jspref আমার জমাগুলি গ্রহণ করতে অস্বীকার করেছে, সুতরাং এখানে তারা বেঞ্চমার্ক.জেএস ব্যবহার করে ফলাফল

        Name            |   ops/sec   |  ± %  | runs sampled
for loop and push       |      177506 |  0.92 | 63
Push Apply              |      234280 |  0.77 | 66
spread operator         |      259725 |  0.40 | 67
set length and for loop |      284223 |  0.41 | 66

কোথায়

লুপ এবং ধাক্কা জন্য:

    for (var i = 0, l = source.length; i < l; i++) {
        target.push(source[i]);
    }

প্রয়োগ করুন:

target.push.apply(target, source);

স্প্রেড অপারেটর:

    target.push(...source);

এবং অবশেষে 'সেট দৈর্ঘ্য এবং লুপ জন্য' উপরের ফাংশন


এই প্রশ্নটি প্রতিটি সময় নতুন অ্যারে তৈরি করার উপায় সন্ধান করছে, বিদ্যমান অ্যারেটি সংশোধন করবে না।
জ্যাক গিফিন

10

𝗥𝗲𝘀𝘂𝗹𝘁𝘀 𝗔𝗻𝗱 𝗥𝗲𝘀𝘂𝗹𝘁𝘀

তথ্যের জন্য, jsperf এ পারফরম্যান্স পরীক্ষা এবং কনসোলে কিছু জিনিস পরীক্ষা করা হয়। গবেষণার জন্য, ওয়েবসাইটটি irt.org ব্যবহার করা হয়। নীচে এই সমস্ত উত্সগুলির একত্রিত করে নীচে একটি উদাহরণ ফাংশন রয়েছে is

╔═══════════════╦══════╦═════════════════╦════════ ═══════╦═════════╦══════════╗
Od পদ্ধতি onকনকাটস্লাইস এবং পুশ.এপ্লি ║ পুশ.প্লাই এক্স 2 ║ ফর্মলুপ ║ স্প্রেড ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
O এমওপিএস / সেক ║179 ║104 ║ 76 ║ 81 ║28 ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
║ স্পর্শযুক্ত অ্যারে - হ্যাঁ! কেবল কাটা ║ না ║ সম্ভবত 2   ║ ║
Sp রাখে বিরল ║ rayarray (1 ম আর্গ) ║ ║ ║ ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
║ সমর্থন IMSIE 4║MSIE 5.5 ║ MSIE 5.5 ║ MSIE 4 ║এডিজ 12 ║
Source ( উত্স ) ║NNav 4║Nav 4.06 ║ NNav 4.06 ║ NNav 3 ║ MSIE  NNav ║
╠═══════════════╬══════╬═════════════════╬════════ ═══════╬═════════╬══════════╣
Rআরার মতো ক্রিয়াকলাপ ║ কেবল ধাক্কা দেওয়া the হ্যাঁ! হ্যাঁ! যদি থাকে ║
একটি অ্যারের মতো ray 2ndarray (২ য় আর্গ) ║ ║ ║iterator 1   ║ ║
╚═══════════════╩══════╩═════════════════╩════════ ═══════╩═════════╩══════════╝
1 যদি অ্যারের-মতো বস্তুর কোনও সিম্বল.আইটিরেটর না থাকে সম্পত্তি , তবে চেষ্টা করে
  এটি ছড়িয়ে দিতে ব্যতিক্রম ছুঁড়ে ফেলবে।
2 কোডের উপর নির্ভর করে। নিম্নলিখিত উদাহরণ কোড "YES" বিরলতা সংরক্ষণ করে।
function mergeCopyTogether(inputOne, inputTwo){
   var oneLen = inputOne.length, twoLen = inputTwo.length;
   var newArr = [], newLen = newArr.length = oneLen + twoLen;
   for (var i=0, tmp=inputOne[0]; i !== oneLen; ++i) {
        tmp = inputOne[i];
        if (tmp !== undefined || inputOne.hasOwnProperty(i)) newArr[i] = tmp;
    }
    for (var two=0; i !== newLen; ++i, ++two) {
        tmp = inputTwo[two];
        if (tmp !== undefined || inputTwo.hasOwnProperty(two)) newArr[i] = tmp;
    }
    return newArr;
}

উপরে যেমন দেখা গেছে, আমি যুক্তি দিয়ে বলব যে কনক্যাট প্রায় সবসময়ই পারফরম্যান্স এবং অতিরিক্ত অ্যারেগুলির স্বল্পতা বজায় রাখার ক্ষমতা উভয়ের পক্ষে যায়। তারপরে, অ্যারে-লাইকগুলির জন্য (যেমন DOMNodeLists পছন্দ করুন document.body.children) জন্য, আমি লুপটি ব্যবহার করার পরামর্শ দেব কারণ এটি দু'টি সর্বাধিক পারফরম্যান্ট এবং একমাত্র অন্যান্য পদ্ধতি যা স্পারস অ্যারে ধরে রাখে। নীচে, আমরা খুব শীঘ্রই বিচ্ছিন্নতা অ্যারে এবং অ্যারে-পছন্দগুলি দ্বারা বিভ্রান্তি দূর করতে বোঝাতে চাই over

𝗙𝘂𝘁𝘂𝗿𝗲 𝗙𝘂𝘁𝘂𝗿𝗲

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

বাইট ║ ডেটা এখানে
═════╬═══════════
0x00 ║ int অসংখ্যিক প্রপার্টি লেন্থ = 0x00000000
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ int দৈর্ঘ্য = 0x00000001
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00। Int মান ইন্ডেক্স = 0x00000000
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ অন্তর্ভুক্ত মান টাইপ = জেএসপিআরসিআইভিটিবি
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড
0x00 ║ uintptr_t মান পয়েন্টার = 0x38d9eb60 (বা এটি যে কোনও স্মৃতিতে থাকে)
0x01 ║ আইবিড
0x02 ║ আইবিড
0x03 ║ আইবিড

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

এটি ভাবার বিকল্প উপায় হ'ল এটি। উত্স অ্যারে এক হ'ল কাগজের একটি বড় স্ট্যাক একসাথে। উত্স অ্যারে টু হ'ল আরও একটি বড় কাগজপত্র ack এটা কি আপনার পক্ষে দ্রুত হবে?

  1. দোকানে যান, প্রতিটি উত্স অ্যারের অনুলিপি জন্য প্রয়োজনীয় কাগজ কিনুন। তারপরে প্রতিটি উত্স অ্যারের স্ট্যাকগুলি কাগজটির মাধ্যমে একটি অনুলিপি-মেশিনের মাধ্যমে রাখুন এবং ফলস্বরূপ দুটি অনুলিপি একত্রে প্রধান করুন।
  2. দোকানে যান, প্রথম উত্স অ্যারের একক অনুলিপির জন্য পর্যাপ্ত কাগজ কিনুন। তারপরে, কোনও ফাঁকা দাগ দাগ পূরণের বিষয়টি নিশ্চিত করে, হাতে নতুন উত্সটিতে উত্স অ্যারের অনুলিপি করুন। তারপরে, দোকানে ফিরে যান, দ্বিতীয় উত্স অ্যারের জন্য পর্যাপ্ত কাগজ কিনুন। তারপরে, দ্বিতীয় উত্স অ্যারের মাধ্যমে যান এবং অনুলিপিটি অনুলিপি করার সময় অনুলিপি করুন। তারপরে, সমস্ত অনুলিপি করা কাগজপত্র একসাথে প্রধান করুন।

উপরের সাদৃশ্যগুলিতে বিকল্প # 1 অ্যারে.প্রোটোটাইপ কোডকেটকে উপস্থাপন করে এবং # 2 অ্যারে.প্রোটোটাইপ.পুশ.অ্যাপলিকে উপস্থাপন করে। আসুন আমরা এটি পরীক্ষা করে আসি ঠিক একই রকম জেএস্পেরফের সাথে আলাদা করে এটির ক্ষেত্রে যে এটি পৃথক পৃথক অ্যারেগুলির উপর পরীক্ষা করে, কঠিন অ্যারেগুলিতে নয়। এটি ঠিক এখানে খুঁজে পেতে পারেন ।

অতএব, আমি আমার কেসটিকে বিশ্রাম দিয়ে বলছি যে এই বিশেষ ব্যবহারের ক্ষেত্রে পারফরম্যান্সের ভবিষ্যত আরে.প্রোটোটাইপ.পুশ্রে নয়, বরং অ্যারে.প্রোটোটাইপ.কনকাটে রয়েছে।

𝗖𝗹𝗮𝗿𝗶𝗳𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀

𝗔𝗿𝗿𝗮𝘆𝘀 𝗔𝗿𝗿𝗮𝘆𝘀

যখন অ্যারের নির্দিষ্ট সদস্যগুলি কেবল অনুপস্থিত থাকে। উদাহরণ স্বরূপ:

// This is just as an example. In actual code, 
// do not mix different types like this.
var mySparseArray = [];
mySparseArray[0] = "foo";
mySparseArray[10] = undefined;
mySparseArray[11] = {};
mySparseArray[12] =  10;
mySparseArray[17] = "bar";
console.log("Length:   ", mySparseArray.length);
console.log("0 in it:  ", 0 in mySparseArray);
console.log("arr[0]:   ", mySparseArray[0]);
console.log("10 in it: ", 10 in mySparseArray);
console.log("arr[10]   ", mySparseArray[10]);
console.log("20 in it: ", 20 in mySparseArray);
console.log("arr[20]:  ", mySparseArray[20]);

বিকল্পভাবে, জাভাস্ক্রিপ্ট আপনাকে অতিরিক্ত অতিরিক্ত অ্যারেগুলি সহজেই আরম্ভ করার অনুমতি দেয়।

var mySparseArray = ["foo",,,,,,,,,,undefined,{},10,,,,,"bar"];

𝗔𝗿𝗿𝗮𝘆-𝗟𝗶𝗸𝗲𝘀

একটি অ্যারের মতো একটি বস্তু যাতে কমপক্ষে একটি lengthসম্পত্তি রয়েছে তবে এটি new Arrayবা এর সাথে আরম্ভ করা হয়নি[] ; উদাহরণস্বরূপ, নীচের বিষয়গুলি অ্যারে-জাতীয় হিসাবে শ্রেণিবদ্ধ করা হয়েছে।

{0: "foo", 1: "বার", দৈর্ঘ্য: 2
document.body.children
নতুন Uint8Array (3)
  • এটি অ্যারে-এর মতো কারণ যদিও এটি একটি (এন) (টাইপড) অ্যারে, এটিকে একটি অ্যারেতে জোর করে নির্মাণকারীকে পরিবর্তন করে।
(ফাংশন () {রিটার্ন আর্গুমেন্ট}) ()

এমন পদ্ধতি ব্যবহার করে যা ঘটে তা পর্যবেক্ষণ করুন যা স্লাইসের মতো অ্যারেগুলিতে অ্যারে-পছন্দ পছন্দ করে does

  • দ্রষ্টব্য: পারফরম্যান্সের কারণে ফাংশন আর্গুমেন্টে স্লাইস কল করা খারাপ অভ্যাস।

কনটেটের মতো অ্যারেতে অ্যারে-পছন্দগুলিকে বাধ্য করে না এমন কোনও পদ্ধতি ব্যবহার করে কী ঘটে তা লক্ষ্য করুন ।


9

জাভাস্ক্রিপ্ট ES6 এর সাহায্যে আপনি ... অপারেটরটিকে একটি স্প্রেড অপারেটর হিসাবে ব্যবহার করতে পারেন যা অ্যারেটিকে মূলত মানগুলিতে রূপান্তর করবে। তারপরে, আপনি এর মতো কিছু করতে পারেন:

const myArray = [1,2,3,4,5];
const moreData = [6,7,8,9,10];

const newArray = [
  ...myArray,
  ...moreData,
];

সিনট্যাক্স সংক্ষিপ্ত হওয়ার সময়, আমি জানি না কীভাবে এটি অভ্যন্তরীণভাবে কাজ করে এবং বৃহত অ্যারেতে পারফরম্যান্সের কী কী প্রভাব পড়ে।


2
আপনি যদি ব্যাবেল কীভাবে এটি রূপান্তর করে তা একবার দেখুন , আপনি দেখতে পাবেন যে এটি Array.push.applyপ্রযুক্তি ব্যবহারের চেয়ে ধীর হওয়া উচিত নয় ।
emil.c

1
@ জ্যাকগিফিন আমি কেবল রায়ান যা উল্লেখ করেছিলেন তা উল্লেখ করছিলাম যে এটি অভ্যন্তরীণভাবে কীভাবে কাজ করে এবং কীভাবে পারফরম্যান্সের প্রভাব পড়তে পারে তা তিনি জানেন না, আমি আসলে এই পদ্ধতির পরামর্শ দিচ্ছিলাম না। যাই হোক না কেন, আপনি আপনার উত্তরের উপর একটি খুব ভাল কাজ করেছেন, দুর্দান্ত গবেষণা, এই জাতীয় বিবরণটি জানা সর্বদা ভাল।
emil.c

9

এখানে ES6 উপায়

var newArray = [];
let dataArray1 = [1,2,3,4]
let dataArray2 = [5,6,7,8]
newArray = [...dataArray1, ...dataArray2]
console.log(newArray)

উপরের পদ্ধতিটি বেশিরভাগ ক্ষেত্রে ক্ষেত্রে যায় এবং কেসগুলি এটি বিবেচনা করা হয় না দয়া করে concatযেমন আপনার অ্যারেতে কয়েক হাজার আইটেম রয়েছে।

    let dataArray1 = [1,2,3,4]
    let dataArray2 = [5,6,7,8]
    let newArray = dataArray1.concat(dataArray2);
    console.log(newArray)


8

অ্যারে.প্রোটোটাইপ.পুষ্প অ্যাপ্লিকেশন সম্পর্কে বেশ কয়েকটি উত্তর রয়েছে । এখানে একটি সুস্পষ্ট উদাহরণ:

var dataArray1 = [1, 2];
var dataArray2 = [3, 4, 5];
var newArray = [ ];
Array.prototype.push.apply(newArray, dataArray1); // newArray = [1, 2]
Array.prototype.push.apply(newArray, dataArray2); // newArray = [1, 2, 3, 4, 5]
console.log(JSON.stringify(newArray)); // Outputs: [1, 2, 3, 4, 5]

আপনার যদি ES6 সিনট্যাক্স থাকে:

var dataArray1 = [1, 2];
var dataArray2 = [3, 4, 5];
var newArray = [ ];
newArray.push(...dataArray1); // newArray = [1, 2]
newArray.push(...dataArray2); // newArray = [1, 2, 3, 4, 5]
console.log(JSON.stringify(newArray)); // Outputs: [1, 2, 3, 4, 5]


4

আপনি যদি মূল অ্যারেটি সংশোধন করতে চান তবে আপনি ছড়িয়ে দিতে পারেন এবং চাপ দিতে পারেন:

var source = [1, 2, 3];
var range = [5, 6, 7];
var length = source.push(...range);

console.log(source); // [ 1, 2, 3, 5, 6, 7 ]
console.log(length); // 6

আপনি যদি নিশ্চিত করতে চান যে কেবল একই ধরণের আইটেমগুলি sourceঅ্যারেতে যায় (উদাহরণস্বরূপ সংখ্যা এবং স্ট্রিং মিশ্রণ না করে) তবে টাইপস্ক্রিপ্ট ব্যবহার করুন।

/**
 * Adds the items of the specified range array to the end of the source array.
 * Use this function to make sure only items of the same type go in the source array.
 */
function addRange<T>(source: T[], range: T[]) {
    source.push(...range);
}

2

আমাদের দুটি এবং ক খ রয়েছে। কোডটি এখানে অ্যারে যা করেছে তা অ্যারে বি তে ঠেলছে।

let a = [2, 4, 6, 8, 9, 15]

function transform(a) {
    let b = ['4', '16', '64']
    a.forEach(function(e) {
        b.push(e.toString());
    });
    return b;
}

transform(a)

[ '4', '16', '64', '2', '4', '6', '8', '9', '15' ]

1
দয়া করে একটি উত্তর হিসাবে কোড পোস্ট করবেন না। কোডটি কী করে এবং কীভাবে এটি সমস্যার সমাধান করে তা ব্যাখ্যা করুন।
প্যাট্রিক হন্ড


-2

IE এর জন্য পুশ () ফাংশনটির পরিবর্তে কনক্যাট ফাংশন ব্যবহার করুন। উদাহরণস্বরূপ,

var a=a.concat(a,new Array('amin'));

1
উভয়ই খুব IE সামঞ্জস্যপূর্ণ
জ্যাক গিফিন

-3

এটি একটি কার্যকরী কোড এবং এটি সূক্ষ্মভাবে কাজ করে:

var els = document.getElementsByTagName('input'), i;
var invnum = new Array();
var k = els.length;
for(i = 0; i < k; i++){invnum.push(new Array(els[i].id,els[i].value))}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.