كيفية إلحاق شيء ما بمصفوفة؟

سئل على ٩ ديسمبر ٢٠٠٨  ·  تمت مشاهدة 3.7M مرة  ·  مصدر

interstar picture
في ٩ ديسمبر ٢٠٠٨

كيف أقوم بإلحاق كائن (مثل سلسلة أو رقم) بمصفوفة في JavaScript؟

الإجابات

jdecuyper picture
في ٩ ديسمبر ٢٠٠٨
4598

استخدم الطريقة Array.prototype.push لإلحاق القيم بنهاية المصفوفة:

// initialize array
var arr = [
  "Hi",
  "Hello",
  "Bonjour"
];

// append new value to the array
arr.push("Hola");

console.log(arr);

يمكنك استخدام الدالة push() لإلحاق أكثر من قيمة بمصفوفة في مكالمة واحدة:

// initialize array
var arr = ["Hi", "Hello", "Bonjour", "Hola"];

// append multiple values to the array
arr.push("Salut", "Hey");

// display all values
for (var i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

تحديث

إذا كنت تريد إضافة عناصر مصفوفة إلى مصفوفة أخرى ، فيمكنك استخدام firstArray.concat(secondArray) :

var arr = [
  "apple",
  "banana",
  "cherry"
];

arr = arr.concat([
  "dragonfruit",
  "elderberry",
  "fig"
]);

console.log(arr);

تحديث

مجرد إضافة لهذه الإجابة إذا كنت تريد إضافة أي قيمة إلى بداية المصفوفة (أي الفهرس الأول) ، فيمكنك استخدام Array.prototype.unshift لهذا الغرض.

var arr = [1, 2, 3];
arr.unshift(0);
console.log(arr);

كما أنه يدعم إلحاق قيم متعددة في وقت واحد تمامًا مثل push .


تحديث

هناك طريقة أخرى مع بناء جملة ES6 وهي إرجاع مصفوفة جديدة الانتشار . هذا يترك المصفوفة الأصلية دون تغيير ، لكنه يعيد مصفوفة جديدة مع إلحاق عناصر جديدة ، بما يتوافق مع روح البرمجة الوظيفية.

const arr = [
  "Hi",
  "Hello",
  "Bonjour",
];

const newArr = [
  ...arr,
  "Salut",
];

console.log(newArr);
MK_Dev picture
في ٩ ديسمبر ٢٠٠٨
1058

إذا كنت تقوم بإلحاق متغير واحد فقط ، فإن push() يعمل بشكل جيد. إذا كنت تريد إلحاق مصفوفة أخرى ، فاستخدم concat() :

var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

var ar3 = ar1.concat(ar2);

alert(ar1);
alert(ar2);
alert(ar3);

لا تؤثر السلسلة على ar1 و ar2 ما لم تتم إعادة تعيينها ، على سبيل المثال:

var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

ar1 = ar1.concat(ar2);
alert(ar1);

الكثير من المعلومات العظيمة هنا

Jens Roland picture
في ٣٠ سبتمبر ٢٠١٠
412

أظهرت بعض المقارنة المعيارية السريعة (كل اختبار = 500 ألف عنصر مُلحق والنتائج عبارة عن متوسطات تشغيلات متعددة) ما يلي:

Firefox 3.6 (Mac):

  • المصفوفات الصغيرة: arr[arr.length] = b أسرع (300 مللي ثانية مقابل 800 مللي ثانية)
  • المصفوفات الكبيرة: arr.push(b) أسرع (500 مللي ثانية مقابل 900 مللي ثانية)

Safari 5.0 (Mac):

  • المصفوفات الصغيرة: arr[arr.length] = b أسرع (90 مللي ثانية مقابل 115 مللي ثانية)
  • المصفوفات الكبيرة: arr[arr.length] = b أسرع (160 مللي ثانية مقابل 185 مللي ثانية)

جوجل كروم 6.0 (ماك):

  • المصفوفات الصغيرة: لا يوجد فرق كبير (و Chrome سريع! فقط ~ 38 مللي ثانية !!)
  • المصفوفات الكبيرة: لا يوجد فرق كبير (160 مللي ثانية)

تعجبني صيغة arr.push() أفضل ، لكنني أعتقد أنني سأكون أفضل حالًا باستخدام الإصدار arr[arr.length] ، على الأقل في السرعة الأولية. أود أن أرى نتائج تشغيل IE بالرغم من ذلك.


حلقات القياس الخاصة بي:

function arrpush_small() {
    var arr1 = [];
    for (a = 0; a < 100; a++)
    {
        arr1 = [];
        for (i = 0; i < 5000; i++)
        {
            arr1.push('elem' + i);
        }
    }
}

function arrlen_small() {
    var arr2 = [];
    for (b = 0; b < 100; b++)
    {
        arr2 = [];
        for (j = 0; j < 5000; j++)
        {
            arr2[arr2.length] = 'elem' + j;
        }
    }
}


function arrpush_large() {
    var arr1 = [];
    for (i = 0; i < 500000; i++)
    {
        arr1.push('elem' + i);
    }
}

function arrlen_large() {
    var arr2 = [];
    for (j = 0; j < 500000; j++)
    {
        arr2[arr2.length] = 'elem' + j;
    }
}
Omnimike picture
في ٣٠ أغسطس ٢٠١٢
306

أعتقد أنه من الجدير بالذكر أنه يمكن استدعاء الدفع باستخدام عدة وسيطات ، والتي سيتم إلحاقها بالمصفوفة بالترتيب. فمثلا:

var arr = ['first'];
arr.push('second', 'third');
console.log(arr);

نتيجة لذلك يمكنك استخدام push.apply لإلحاق مصفوفة بمصفوفة أخرى مثل:

var arr = ['first'];
arr.push('second', 'third');
arr.push.apply(arr, ['forth', 'fifth']);
console.log(arr);

المشروح ES5 ديه مزيد من المعلومات حول بالضبط ما دفع و تطبيق القيام به.

تحديث 2016: مع فارق السعر ، لا تحتاج إلى apply بعد الآن ، مثل:

var arr = ['first'];
arr.push('second', 'third');

arr.push(...['fourth', 'fifth']);
console.log(arr) ;
Fizer Khan picture
في ١٧ مارس ٢٠١٤
83

يمكنك استخدام الدالة push و apply لإلحاق صفيفين.

var array1 = [11, 32, 75];
var array2 = [99, 67, 34];

Array.prototype.push.apply(array1, array2);
console.log(array1);

سيتم إلحاق array2 بـ array1 . الآن يحتوي array1 على [11, 32, 75, 99, 67, 34] . هذا الرمز أبسط بكثير من كتابة حلقات for لنسخ كل عنصر في المصفوفة.

CodingIntrigue picture
في ٩ يونيو ٢٠١٥
65

مع عامل تشغيل ES6 الجديد ، يصبح الانضمام إلى صفيفتين باستخدام push أسهل:

var arr = [1, 2, 3, 4, 5];
var arr2 = [6, 7, 8, 9, 10];
arr.push(...arr2);
console.log(arr);

يؤدي هذا إلى إضافة محتويات arr2 إلى نهاية arr .

مثال بابل REPL

rjmunro picture
في ٣ أغسطس ٢٠١١
52

إذا كان arr مصفوفة ، و val هي القيمة التي تريد إضافتها ، استخدم:

arr.push(val);

على سبيل المثال

var arr = ['a', 'b', 'c'];
arr.push('d');
console.log(arr);
Mαzen picture
في ١٣ أغسطس ٢٠١١
50

استخدم concat :

a = [1, 2, 3];
b = [3, 4, 5];
a = a.concat(b);
console.log(a);
Downhillski picture
في ٢٩ نوفمبر ٢٠١٥
36

Javascript مع معيار ECMAScript 5 المدعوم من قبل معظم المتصفحات الآن ، يمكنك استخدام apply() لإلحاق array1 بـ array2 .

var array1 = [3, 4, 5];
var array2 = [1, 2];

Array.prototype.push.apply(array2, array1);

console.log(array2); // [1, 2, 3, 4, 5]

Javascript مع معيار ECMAScript 6 المدعوم من Chrome و FF و IE Edge ، يمكنك استخدام عامل التشغيل spread :

"use strict";
let array1 = [3, 4, 5];
let array2 = [1, 2];

array2.push(...array1);

console.log(array2); // [1, 2, 3, 4, 5]

عامل التشغيل spread سيستبدل array2.push(...array1); بـ array2.push(3, 4, 5); عندما يفكر المتصفح في المنطق.

نقطة إضافية

إذا كنت ترغب في إنشاء متغير آخر لتخزين كل العناصر من كلا المصفوفتين ، فيمكنك القيام بذلك:

ES5 var combinedArray = array1.concat(array2);

ES6 const combinedArray = [...array1, ...array2]

عامل السبريد ( ... ) هو توزيع كل العناصر من المجموعة.

Pawan Singh picture
في ٢٩ أغسطس ٢٠١٤
32

إذا كنت تريد إلحاق صفيفين -

var a = ['a', 'b'];
var b = ['c', 'd'];

ثم يمكنك استخدام:

var c = a.concat(b);

وإذا كنت تريد إضافة سجل g إلى المصفوفة ( var a=[] ) فيمكنك استخدام:

a.push('g');