Bir elementi xüsusi dizindəki bir sıra daxil etmək üçün necə?

Mən üslubda javascript array əlavə üsulunu axtarıram:

 arr.insert(index, item) 

Tercihen jQuery-də, ancaq javascriptin hər hansı bir tətbiqi bu nöqtədə ediləcək.

2294
25 февр. tags2k üçün 25 fevral müəyyən 2009-02-25 17:29 '09 at 17:29 2009-02-25 17:29
@ 14 cavab

İstədiyiniz şey, öz splice funksiyasıdır.

arr.splice(index, 0, item); item arr -a göstərilən indeksə daxil edər (əvvəlcə 0 elementi silmək, yəni yeni daxildir).

Bu nümunədə bir dizi yaratacağıq və indeks 2'ye bir element əlavə edəcəyik:

3766
25 февр. Cavab 25 fevralda tvanfosson tərəfindən verilir. 2009-02-25 17:32 '09 at 17:32 'da 2009-02-25 17:32

Array.insert metodunu aşağıdakı adımları uygulayarak həyata keçirə bilərsiniz:

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

Sonra belə bir şəkildə istifadə edə bilərsiniz:

 var arr = [ 'A', 'B', 'D', 'E' ]; arr.insert(2, 'C'); // => arr == [ 'A', 'B', 'C', 'D', 'E' ] 
227
03 окт. Cavab, FrEsC tərəfindən verilir . 2012-10-03 17:26 '12 at 5:26 pm 2012-10-03 17:26

Xüsusi insert dizi üsulları

Bir neçə dəlil və zəncirləmə dəstəyi ilə

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

Çox elementləri əlavə edə bilərsiniz (bir doğma splice ) və zənciri dəstəkləyir:

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

2. Birləşmə və məcburi sübutlar üçün bir sıra dəstəyi ilə

  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; }; 

Serialların arqumentləri müəyyən bir sıra ilə birləşdirə bilər və həmçinin bir zənciri dəstəkləyir:

 ["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 Cavab VisioN tərəfindən 25 Mart 2013 tarixində saat 20: 45- də verilmişdir 2013-03-25 20:45

Splicing əlavə, bu yanaşma istifadə edə bilərsiniz, bu orijinal sıra dəyişdirmək deyil, lakin əlavə element ilə yeni bir sıra yaradır. Adətən mutasiyalardan qaçınmalısınız. Burada es6 təbliğat operatorunu istifadə edirəm.

63
04 июля '16 в 12:18 2016-07-04 12:18 Cavab Gaafar tərəfindən 4 İyul '16' da 12:18 'də 2016-07-04 12:18' də verilir

Bir neçə elementi bir dəfə bir sıra daxil etmək istəyirsinizsə, bu cavabı gözdən keçirin: javascript-də bir array bir araya əlavə etmək üçün ən yaxşı yolu

Həm burada həm nümunələri göstərən bəzi xüsusiyyətlər bunlardır:

 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; } 

Nəhayət, jsFiddle burada özünüz üçün görə bilərsiniz: http://jsfiddle.net/luisperezphd/Wc8aS/

Burada funksiyaları necə istifadə edirsiniz:

 // 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 авг. Luis Perez tərəfindən verilmiş cavab 30 Avqust. 2012-08-30 07:37 '12 saat 07:37 'da 2012-08-30 07:37

Düzgün funksional proqramlaşdırma və fokus üçün, Array.prototype.insert() etmək vacibdir. Əslində tamamilə mənasız boş bir sıra yerinə mutated bir array döndürürsə, birləşmə mükəmməl ola bilər. Beləliklə burada

15
14 мая '16 в 2:22 2016-05-14 02:22 14 may, Redu 14 may, 2:22 'də cavab verilir . 2016-05-14 02:22

Bu halda, mən təmiz JavaScript istifadə etməyi məsləhət görürəm, JavaScript- da heç bir əlavə üsulu yoxdur, ancaq biz sizin üçün vəzifəni yerinə yetirən daxili bir Array metodu olan bir üsula sahibik.

Diqqət edək ki, bu əlavə () ...

Splice () metodu, mövcud elementləri silmək və ya yeni elementlər əlavə etməklə bir sıra məzmununu dəyişir.

Tamam, xeyli aşağıda bu sıra var:

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

Aşağıdakı şəkildə 3 silə bilər:

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

Bu, 3-ə qayıdır, ancaq indi arr yoxsa, biz:

 [1, 2, 4, 5] 

İndiyə qədər çox yaxşı, amma birləşməni istifadə edərək bir sıra yeni bir elementə necə əlavə edə bilərik? Ona 3 qayıdır ...

 arr.splice(2, 0, 3); 

Nə etdiyimizi görək ...

Yenidən birləşməni istifadə edirik, amma bu dəfə ikinci arqument üçün 0 keçirik, yəni elementi silmək istəyirik, eyni zamanda ikinci indeksə əlavə olunacaq üçüncü arqument əlavə edəcəyik ...

Nə edə biləcəyimizi və eyni zamanda əlavə edə biləcəyinizi bilməliyik, məsələn, indi edə bilərik:

 arr.splice(2, 2, 3); 

İndeks 2-də 2 maddə çıxaracaq, sonra isə indeks 2-də 3-ü əlavə edəcəyik və nəticə belə olacaq:

 [1, 2, 3, 5]; 

Bu, hər bir elementin birləşdirilməsində necə işlədiyini göstərir:

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

9
25 дек. Cavab Alirza verildi 25 dekabr. 2017-12-25 16:04 '17 saat 04:04 'da 2017-12-25 16:04

Bu,

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

arr elementini göstərilən index arr (əvvəlcə 0 elementi silmək, yəni yeni daxildir).

8
24 февр. Cavab hannad rehman tərəfindən verilir 24 fevral. 2017-02-24 16:29 '17 də 4:29 'də 2017-02-24 16:29

Başqa bir mümkün həll Array#reduce istifadə edir.

5
05 апр. cavab cür istifadəçi verilir 05 Apr 2017-04-05 20:06 '17 at 20:06 2017-04-05 20:06

Bu, artıq cavablandırılmış olsa belə, mən bu notu alternativ yanaşma üçün əlavə edirəm.

Müəyyən bir mövqedə müəyyən bir sıra elementləri qoymaq istəmişdim, çünki müəyyən bir sıraya daxil olmağının təmin edilməməsi ilə "birləşmə arrayından" (yəni bir obyektdən) ayrılırlar. Nəticədə array obyektlərin bir sıra olmasını istəmişdim, amma obyektlər serialda müəyyən bir qaydada idi, çünki dizi əmrlərini təmin edir. Mən də bunu etdim.

Birincisi, mənbə obyekti, PostgreSQL-dən əldə edilən JSONB simli. Hər bir uşağın obyektindəki "sifariş" əmlakı ilə sıralanmasını istəmişdim.

 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); 

Cədvəldəki qovşaqların sayı bilindiyindən, əvvəlcə müəyyən uzunluğu olan bir sıra yaradıram:

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

Və sonra obyektin yenidən cəhd edin, yeni yaradılmış müvəqqəti obyektləri hər hansı bir çeşidləmə olmadan dizidəki hüququ yerlərə yerləşdirin.

 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 дек. cavab Ville 04 dekabr verilir . 2015-12-04 21:36 '15 saat 21:36 ' de

Belirli bir endekste tek bir öğe əlavə edin

 //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'; 

Belirli bir dizinde birden çox öğe əlavə edin

 //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 Cavab Srikrushna Pal tərəfindən 28 İyun 1818'de saat 10:13 'də 2018-06-28 22:13' də verilir

Mən onu sınayıb yaxşı işləyirəm!

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

İndeks bir maddə daxil etmək və ya silmək istədiyiniz mövqedədir. 0, yəni. İkinci parametr silinəcək obyektdən olan elementlərin sayını müəyyənləşdirir - bunlar dizidəki yaratmaq istədiyiniz yeni qeydlərdir. Bir və ya daha çox ola bilər.

 initialArr.splice(2, 0, "Nigeria"); initialArr.splice(2, 0, "Australia","UK"); 
2
08 марта '17 в 9:35 2017-03-08 09:35 Cavab Pawan tərəfindən 08 Mart 'da 9:35' də veriləcək, 2017-03-08 09:35

Bununla problemləri olan hər kəs, yuxarıdakı bütün variantları sınamış və heç vaxt onu almamışdır. Mən qərarımı bölüşürəm, sizin obyektinizin və serialınızın xassələrini açıq şəkildə ifadə etmək istəməyinizə zəmanət vermək lazımdır.

 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; } 

Bu bir sıra referansların təkrarlanması və onu yoxlamaq istədiyiniz obyektlə müqayisə etmək, hər ikisini simli halına çevirmək və uyğun olduqda təkrarlamaqdır. Sonra saymaq olar. Bu yaxşılaşdırıla bilər, amma bu mənim həll yerimdir. Bu kömək edir.

1
06 дек. Cavab Clyde 06 dekabrda verilir. 2018-12-06 07:26 '18 saat 07:26 'də 2018-12-06 07:26

Azaldılması üsulu ilə mənfəət əldə etmək aşağıdakı kimidir:

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

Beləliklə, bu şəkildə indeksə daxil edilmiş element ilə yeni bir sıra (bu, sərin funksional bir yol ola bilər - bu təkan və ya birləşməni istifadə etməkdən daha yaxşıdır) və index dizinin uzunluğundan daha böyük olarsa, o, sonunda yerləşdirilə bilər.

0
12 янв. alejoko tərəfindən verilmiş cavab 12 yanvar 2019-01-12 20:04 '19 saat 20:04 'da 2019-01-12 20:04

yazıları ilə bağlı digər suallar və ya soruşun