javascript - একটি নতুন অ্যারে তৈরি না করে, অন্য অ্যারের সাথে বিদ্যমান জাভাস্ক্রিপ্ট অ্যারে কীভাবে প্রসারিত করবেন




জাভাস্ক্রিপ্ট শেখার বই (10)

অন্য অ্যারের সাথে একটি বিদ্যমান জাভাস্ক্রিপ্ট অ্যারে প্রসারিত করার উপায় বলে মনে হচ্ছে না, অর্থাৎ পাইথনের extend পদ্ধতিটি অনুকরণ করা।

আমি নিম্নলিখিত অর্জন করতে চান:

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]

আমি জানি একটি a.concat(b) পদ্ধতি আছে, তবে এটি কেবলমাত্র প্রথমটি প্রসারিত করার পরিবর্তে একটি নতুন অ্যারে তৈরি করে। আমি একটি অ্যালগরিদম পছন্দ করি যা কার্যকরীভাবে কাজ করে যখন এটি a b উল্লেখযোগ্যভাবে বড় (অর্থাৎ একটি যা অনুলিপি করে না)।

দ্রষ্টব্য: এটি কোন অ্যারেতে কিছু যোগ করার অনুরূপ নয় ? - এখানে লক্ষ্যটি একটি অ্যারের সমগ্র সামগ্রীটিকে অন্যটিতে যুক্ত করা এবং এটি "জায়গায়", অর্থাৎ প্রসারিত অ্যারের সমস্ত উপাদান অনুলিপি না করেই করা।


> 150,000 রেকর্ডের জন্য Array.extend পরিবর্তে Array.push ব্যবহার করুন।

if (!Array.prototype.extend) {
  Array.prototype.extend = function(arr) {
    if (!Array.isArray(arr)) {
      return this;
    }

    for (let record of arr) {
      this.push(record);
    }

    return this;
  };
}

আপনি jQuery ব্যবহার করতে চান, $.merge()

উদাহরণ:

a = [1, 2];
b = [3, 4, 5];
$.merge(a,b);

ফলাফল: একটি = [1, 2, 3, 4, 5]


আপনি নীচের হিসাবে প্রসারিত করার জন্য আপনি একটি polyfill তৈরি করতে পারেন। এটি অ্যারে যোগ করা হবে; জায়গায় এবং নিজেই ফিরে, যাতে আপনি চেইন অন্যান্য পদ্ধতি করতে পারেন।

if (Array.prototype.extend === undefined) {
  Array.prototype.extend = function(other) {
    this.push.apply(this, arguments.length > 1 ? arguments : other);
    return this;
  };
}

function print() {
  document.body.innerHTML += [].map.call(arguments, function(item) {
    return typeof item === 'object' ? JSON.stringify(item) : item;
  }).join(' ') + '\n';
}
document.body.innerHTML = '';

var a = [1, 2, 3];
var b = [4, 5, 6];

print('Concat');
print('(1)', a.concat(b));
print('(2)', a.concat(b));
print('(3)', a.concat(4, 5, 6));

print('\nExtend');
print('(1)', a.extend(b));
print('(2)', a.extend(b));
print('(3)', a.extend(4, 5, 6));
body {
  font-family: monospace;
  white-space: pre;
}


আমি উপরে বর্ণিত a.push.apply(a, b) পদ্ধতি পছন্দ করি এবং যদি আপনি চান যে আপনি সর্বদা লাইব্রেরী ফাংশনটি a.push.apply(a, b) তৈরি করতে পারেন:

Array.prototype.append = function(array)
{
    this.push.apply(this, array)
}

এবং এটি ভালো ব্যবহার করুন

a = [1,2]
b = [3,4]

a.append(b)

আমি খুব সুন্দর উত্তর দেখতে পাচ্ছি, এবং এটি সব আপনার অ্যারের আকার, আপনার প্রয়োজন এবং লক্ষ্য উপর নির্ভর করে। এটা বিভিন্ন উপায়ে করা যেতে পারে।

আমি লুপ জন্য একটি জাভাস্ক্রিপ্ট ব্যবহার করে সুপারিশ:

var a = [1, 2];
var b = [3, 4, 5];

for (i = 0; i < b.length; i++) {
    a.push(b[i]);
}

console.log(a) আউটপুট হবে

Array [ 1, 2, 3, 4, 5 ]

তারপর আপনি নিজের কাজ করতে পারেন:

function extendArray(a, b){
    for (i = 0; i < b.length; i++) {
        a.push(b[i]);
    }
    return a;
}

console.log(extendArray(a, b)); আউটপুট হবে

Array [ 1, 2, 3, 4, 5 ]

আরো দুটি অ্যারে একত্রিত করার আরেকটি সমাধান

var a = [1, 2],
    b = [3, 4, 5],
    c = [6, 7];

// Merge the contents of multiple arrays together into the first array
var mergeArrays = function() {
 var i, len = arguments.length;
 if (len > 1) {
  for (i = 1; i < len; i++) {
    arguments[0].push.apply(arguments[0], arguments[i]);
  }
 }
};

তারপর কল এবং মুদ্রণ করুন:

mergeArrays(a, b, c);
console.log(a)

আউটপুট হবে: Array [1, 2, 3, 4, 5, 6, 7]


উত্তর সুপার সহজ।

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
(The following code will combine the two arrays.)

a = a.concat(b);

>>> a
[1, 2, 3, 4, 5]

কনস্যাট জাভাস্ক্রিপ্ট স্ট্রিং concatenation খুব অনুরূপ কাজ করে। আপনি ফাংশন কল অ্যারের শেষে কনস্যাট ফাংশন মধ্যে রাখা পরামিতি একটি সংমিশ্রণ ফিরে আসবে। ক্রুক্স হল যে আপনাকে ফেরত মানটি একটি পরিবর্তনশীলকে বরাদ্দ করতে হবে অথবা এটি হারিয়ে যাবে। তাই উদাহরণস্বরূপ

a.concat(b);  <--- This does absolutely nothing since it is just returning the combined arrays, but it doesn't do anything with it.

এই সমাধানটি আমার জন্য কাজ করে (ECMAScript 6 এর স্প্রেড অপারেটর ব্যবহার করে):

let array = ['my', 'solution', 'works'];
let newArray = [];
let newArray2 = [];
newArray.push(...array); // Adding to same array
newArray2.push([...array]); // Adding as child/leaf/sub-array
console.log(newArray);
console.log(newArray2);


.push পদ্ধতিটি একাধিক আর্গুমেন্ট গ্রহণ করতে পারে, তাই .apply আর্গুমেন্ট হিসাবে দ্বিতীয় অ্যারের সমস্ত উপাদানগুলি পাস করতে .push , আপনি যে ফলাফলটি চান তা পেতে পারেন:

>>> a.push.apply(a, b)

অথবা সম্ভবত, যদি আপনি এটি পরিষ্কার মনে করেন:

>>> Array.prototype.push.apply(a,b)

আপনার ব্রাউজার যদি ECMAScript 6 সমর্থন করে তবে আপনি স্প্রেড অপারেটরটি ব্যবহার করতে পারেন, যা আরো কমপ্যাক্ট এবং মার্জিত:

>>> a.push(...b)

অ্যারে b অত্যন্ত দীর্ঘ (ব্রাউজারের উপর নির্ভর করে প্রায় 100,000 উপাদানগুলিতে সমস্যা শুরু হয়) যদি স্ট্যাক ওভারফ্লো ত্রুটির সাথে এই সমস্ত সমাধান ব্যর্থ হয় তবে দয়া করে মনে রাখবেন। যদি আপনি গ্যারান্টিটি গ্যারান্টি দিতে না পারেন তবে খটি যথেষ্ট ছোট, আপনি অন্য উত্তরের বর্ণিত স্ট্যান্ডার্ড লুপ-ভিত্তিক কৌশলটি ব্যবহার করতে পারেন।


splice() ব্যবহার করে এটি করা সম্ভব:

b.unshift(b.length)
b.unshift(a.length)
Array.prototype.splice.apply(a,b) 
b.shift() // Restore b
b.shift() // 

কিন্তু এটি push.apply হওয়া সত্ত্বেও push.apply চেয়ে দ্রুত নয়, কমপক্ষে ফায়ারফক্স 3.0 তে নয়।





concatenation