Bagaimana cara memasukkan elemen ke dalam array pada indeks tertentu?

Saya mencari metode penyisipan javascript array dalam gaya:

 arr.insert(index, item) 

Lebih disukai di jQuery, tetapi setiap implementasi javascript akan dilakukan pada saat ini.

2294
25 февр. setel ke tags2k 25 Feb 2009-02-25 17:29 '09 pada 17:29 2009-02-25 17:29
@ 14 jawaban

Yang Anda inginkan adalah fungsi splice pada array Anda sendiri.

arr.splice(index, 0, item); akan memasukkan item ke arr pada indeks yang ditentukan (pertama menghapus 0 item, yaitu, hanya menyisipkan).

Dalam contoh ini, kita akan membuat array dan menambahkan elemen ke sana di indeks 2:

3766
25 февр. Jawabannya diberikan oleh tvanfosson pada 25 Feb. 2009-02-25 17:32 '09 pada 17:32 2009-02-25 17:32

Anda dapat menerapkan metode Array.insert dengan mengikuti >

 Array.prototype.insert = function ( index, item ) { this.splice( index, 0, item ); }; 

Maka Anda dapat menggunakannya seperti ini:

 var arr = [ 'A', 'B', 'D', 'E' ]; arr.insert(2, 'C'); // => arr == [ 'A', 'B', 'C', 'D', 'E' ] 
227
03 окт. jawabannya diberikan oleh FrEsC 81 03 Oktober. 2012-10-03 17:26 '12 pada jam 5:26 sore 2012-10-03 17:26

Metode susunan insert khusus

1. Dengan beberapa argumen dan dukungan chaining

  Array.prototype.insert = function(index) { this.splice.apply(this, [index, 0].concat( Array.prototype.slice.call(arguments, 1))); return this; }; 

Itu dapat memasukkan beberapa elemen (seperti splice asli) dan mendukung rantai:

 ["a", "b", "c", "d"].insert(2, "X", "Y", "Z").slice(1, 6); // ["b", "X", "Y", "Z", "c"] 

2. Dengan dukungan array untuk menggabungkan dan mengikat argumen

  Array.prototype.insert = function(index) { index = Math.min(index, this.length); arguments.length > 1  this.splice.apply(this, [index, 0].concat([].pop.call(arguments)))  this.insert.apply(this, arguments); return this; }; 

Itu dapat menggabungkan array dari argumen dengan array yang diberikan, dan juga mendukung rantai:

 ["a", "b", "c", "d"].insert(2, "V", ["W", "X", "Y"], "Z").join("-"); // "abVWXYZcd" 

DEMO: http://jsfiddle.net/UPphH/

66
25 марта '13 в 20:45 2013-03-25 20:45 jawabannya diberikan oleh VisioN pada 25 Maret '13 pada 20:45 2013-03-25 20:45

Selain penyambungan, Anda dapat menggunakan pendekatan ini, yang tidak akan mengubah array asli, tetapi akan membuat array baru dengan elemen yang ditambahkan. Biasanya Anda harus menghindari mutasi. Saya menggunakan operator propagasi es6 di sini.

63
04 июля '16 в 12:18 2016-07-04 12:18 jawabannya diberikan oleh Gaafar pada 4 Juli '16 di 12:18 2016-07-04 12:18

Jika Anda ingin memasukkan beberapa elemen ke dalam array sekaligus, periksa jawaban ini: cara terbaik untuk memisahkan array ke dalam array di javascript

Juga ada beberapa fitur yang menggambarkan kedua contoh:

 function insertAt(array, index) { var arrayToInsert = Array.prototype.splice.apply(arguments, [2]); return insertArrayAt(array, index, arrayToInsert); } function insertArrayAt(array, index, arrayToInsert) { Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert)); return array; } 

Akhirnya, ini adalah jsFiddle sehingga Anda dapat melihatnya sendiri: http://jsfiddle.net/luisperezphd/Wc8aS/

Inilah cara Anda menggunakan fungsinya:

 // if you want to insert specific values whether constants or variables: insertAt(arr, 1, "x", "y", "z"); // OR if you have an array: var arrToInsert = ["x", "y", "z"]; insertArrayAt(arr, 1, arrToInsert); 
32
30 авг. balasan yang diberikan oleh Luis Perez 30 Agustus 2012-08-30 07:37 '12 pada 7:37 am 2012-08-30 07:37

Untuk pemrograman fungsional dan fokus yang tepat, penting untuk menciptakan Array.prototype.insert() . Bahkan, splicing bisa menjadi sempurna jika mengembalikan array bermutasi bukan array kosong yang sama sekali tidak berarti. Jadi ini dia

15
14 мая '16 в 2:22 2016-05-14 02:22 balasan diberikan kepada Redu 14 Mei '16 pukul 2:22. 2016-05-14 02:22

Dalam hal ini, saya sarankan menggunakan JavaScript murni, juga tidak ada metode penyisipan dalam JavaScript, tetapi kami memiliki metode yang merupakan metode Array bawaan yang melakukan tugas untuk Anda, disebut splice ...

Mari kita lihat sambungan itu () ...

Metode splice () mengubah konten array dengan menghapus elemen yang ada dan / atau menambahkan elemen baru.

OK, bayangkan kita memiliki array ini di bawah ini:

 const arr = [1, 2, 3, 4, 5]; 

Kami dapat menghapus 3 sebagai berikut:

 arr.splice(arr.indexOf(3), 1); 

Ini akan mengembalikan 3, tetapi jika kita periksa arr sekarang, kita memiliki:

 [1, 2, 4, 5] 

Sejauh ini bagus, tapi bagaimana kita bisa menambahkan elemen baru ke array menggunakan splicing? Biarkan dia kembali 3 masuk ...

 arr.splice(2, 0, 3); 

Mari kita lihat apa yang kita lakukan ...

Kami menggunakan splicing lagi, tapi kali ini untuk argumen kedua, kami melewati 0 , yang berarti kami ingin menghapus elemen, tetapi pada saat yang sama kami akan menambahkan argumen ketiga, yang akan ditambahkan dalam indeks kedua ...

Anda harus tahu apa yang dapat kami hapus dan tambahkan pada saat yang sama, misalnya, sekarang kami dapat melakukannya:

 arr.splice(2, 2, 3); 

Yang akan menghapus 2 item pada indeks 2, kemudian menambahkan 3 pada indeks 2, dan hasilnya adalah:

 [1, 2, 3, 5]; 

Ini menunjukkan bagaimana setiap elemen bekerja dalam splicing:

array.splice (mulai, deleteCount, item1, item2, item3 ...)

9
25 дек. Jawabannya diberikan Alireza 25 Des. 2017-12-25 16:04 '17 pada pukul 16:04 2017-12-25 16:04

Ini adalah:

 var arr= ["India","China","Japan","USA"]; arr.splice(index, 0, item); 

Memperkenalkan elemen dalam arr dengan index ditentukan (pertama menghapus 0 elemen, yaitu, hanya menyisipkan).

8
24 февр. jawabannya diberikan oleh hannad rehman 24 Feb. 2017-02-24 16:29 '17 pukul 16:29 2017-02-24 16:29

Solusi lain yang mungkin adalah menggunakan Array#reduce .

5
05 апр. jawabannya diberikan baik pengguna 05 Apr 2017-04-05 20:06 '17 pada 20:06 2017-04-05 20:06

Bahkan jika ini sudah dijawab, saya menambahkan catatan ini untuk pendekatan alternatif.

Saya ingin meletakkan sejumlah elemen yang diketahui dalam array di posisi tertentu, karena mereka terlepas dari "array asosiatif" (yaitu, sebuah objek), yang menurut definisi tidak dijamin berada dalam urutan diurutkan. Saya ingin array yang dihasilkan menjadi array objek, tetapi objek berada dalam urutan tertentu dalam array, karena array menjamin pesanan mereka. Jadi saya melakukannya.

Pertama objek sumber, string JSONB diperoleh dari PostgreSQL. Saya ingin itu diurutkan berdasarkan properti "order" di setiap objek anak.

 var jsonb_str = '{"one": {"abbr": "", "order": 3}, "two": {"abbr": "", "order": 4}, "three": {"abbr": "", "order": 5}, "initialize": {"abbr": "init", "order": 1}, "start": {"abbr": "", "order": 2}}'; var jsonb_obj = JSON.parse(jsonb_str); 

Karena jumlah node dalam objek diketahui, pertama-tama saya membuat array dengan panjang yang ditentukan:

 var obj_length = Object.keys(jsonb_obj).length; var sorted_array = new Array(obj_length); 

Dan kemudian coba objek lagi, menempatkan objek sementara yang baru dibuat di tempat yang tepat dalam array tanpa penyortiran.

 for (var key of Object.keys(jsonb_obj)) { var tobj = {}; tobj[key] = jsonb_obj[key].abbr; var position = jsonb_obj[key].order - 1; sorted_array[position] = tobj; } console.dir(sorted_array); 
5
04 дек. jawabannya diberikan Ville 04 Des. 2015-12-04 21:36 '15 pada 21:36 2015-12-04 21:36

Tambahkan satu item pada indeks tertentu

 //Append at specific position(here at index 1) arrName.splice(1, 0,'newName1'); //1: index number, 0: number of element to remove, newName1: new element //Append at specific position (here at index 3) arrName[3] = 'newName1'; 

Tambahkan beberapa item pada indeks tertentu

 //Append from index number 1 arrName.splice(1, 0,'newElemenet1', 'newElemenet2', 'newElemenet3'); //1: index number from where append start, //0: number of element to remove, //newElemenet1,2,3: new elements 
4
28 июня '18 в 22:13 2018-06-28 22:13 jawabannya diberikan oleh Srikrushna Pal pada 28 Juni '18 pukul 10:13 malam 2018-06-28 22:13

Saya mencobanya dan berfungsi baik!

 var initialArr = ["India","China","Japan","USA"]; initialArr.splice(index, 0, item); 

Indeks adalah posisi di mana Anda ingin memasukkan atau menghapus suatu item. 0, yaitu Parameter kedua menentukan jumlah elemen dari objek yang akan dihapus - ini adalah catatan baru yang ingin Anda buat dalam array. Mungkin satu atau lebih.

 initialArr.splice(2, 0, "Nigeria"); initialArr.splice(2, 0, "Australia","UK"); 
2
08 марта '17 в 9:35 2017-03-08 09:35 jawabannya diberikan oleh Pawan 08 Maret 17 di 9:35 2017-03-08 09:35

Siapa pun yang memiliki masalah dengan ini, dan mencoba semua opsi di atas dan tidak pernah mendapatkannya. Saya berbagi keputusan saya, harus diingat bahwa Anda tidak ingin secara eksplisit menentukan properti objek dan array Anda.

 function isIdentical(left, right){ return JSON.stringify(left) === JSON.stringify(right); } function contains(array, obj){ let count = 0; array.map((cur) => { if(this.isIdentical(cur, obj)) count++; }); return count > 0; } 

Ini adalah kombinasi dari pengu>

1
06 дек. Jawabannya diberikan oleh Clyde 06 Desember. 2018-12-06 07:26 '18 pada 7:26 pagi 2018-12-06 07:26

Mengambil keuntungan dengan metode reduksi sebagai berikut:

 function insert(arr, val, index) { return index >= arr.length ? arr.concat(val) : arr.reduce((prev, x, i) => prev.concat(i === index ? [val, x] : x), []); } 

Jadi, dengan cara ini kita dapat mengembalikan array baru (ini akan menjadi cara fungsional yang keren - jauh lebih baik daripada menggunakan push atau splice) dengan elemen yang dimasukkan ke dalam indeks, dan jika indeks lebih besar dari panjang array, itu akan dimasukkan di akhir.

0
12 янв. jawaban diberikan oleh alejoko 12 Jan 2019-01-12 20:04 '19 pada 8:04 malam 2019-01-12 20:04

Pertanyaan lain tentang label atau Ajukan pertanyaan