javascript - एक विशिष्ट अनुक्रमणिका में एक सरणी में किसी आइटम को कैसे सम्मिलित करें?




jquery arrays (8)

मैं एक जावास्क्रिप्ट सरणी डालने विधि की शैली में देख रहा हूं:

arr.insert(index, item)

पसंदीदा में jQuery में, लेकिन इस बिंदु पर कोई भी जावास्क्रिप्ट कार्यान्वयन करेगा।


कस्टम सरणी insert तरीकों

1. कई तर्क और चेनिंग समर्थन के साथ

/* Syntax:
   array.insert(index, value1, value2, ..., valueN) */

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

यह कई तत्वों को सम्मिलित कर सकता है (जैसे मूल splice करता है) और चेनिंग का समर्थन करता है:

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

2. सरणी प्रकार तर्क तर्क विलय और समर्थन के साथ

/* Syntax:
   array.insert(index, value1, value2, ..., valueN) */

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

यह दिए गए सरणी के साथ तर्कों से सरणी विलय कर सकता है और चेनिंग का भी समर्थन करता है:

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

डेमो: http://jsfiddle.net/UPphH/


Splice के अलावा, आप इस दृष्टिकोण का उपयोग कर सकते हैं जो मूल सरणी को म्यूट नहीं करेगा, लेकिन अतिरिक्त आइटम के साथ एक नई सरणी बनाएगा। जब भी संभव हो आप को उत्परिवर्तन से बचना चाहिए। मैं यहाँ ES6 फैल ऑपरेटर का उपयोग कर रहा हूँ।

const items = [1, 2, 3, 4, 5]

const insert = (arr, index, newItem) => [
  // part of the array before the specified index
  ...arr.slice(0, index),
  // inserted item
  newItem,
  // part of the array after the specified index
  ...arr.slice(index)
]

const result = insert(items, 1, 10)

console.log(result)
// [1, 10, 2, 3, 4, 5]

इसका उपयोग नए आइटमों के लिए बाकी ऑपरेटर का उपयोग करने के लिए फ़ंक्शन को ट्विक करके एक से अधिक आइटम जोड़ने के लिए किया जा सकता है, और इसके परिणामस्वरूप भी बदले गए परिणाम में फैल सकता है

const items = [1, 2, 3, 4, 5]

const insert = (arr, index, ...newItems) => [
  // part of the array before the specified index
  ...arr.slice(0, index),
  // inserted items
  ...newItems,
  // part of the array after the specified index
  ...arr.slice(index)
]

const result = insert(items, 1, 10, 20)

console.log(result)
// [1, 10, 20, 2, 3, 4, 5]


आप मूल सरणी ऑब्जेक्ट पर splice फ़ंक्शन चाहते हैं।

arr.splice(index, 0, item); निर्दिष्ट इंडेक्स पर item को arr में arr (पहले 0 आइटम हटाएंगे, यानी, यह सिर्फ एक डालने वाला है)।

इस उदाहरण में हम एक सरणी बनायेंगे और इसमें एक तत्व जोड़ देंगे इंडेक्स 2:

var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";

console.log(arr.join());
arr.splice(2, 0, "Lene");
console.log(arr.join());


उचित कार्यात्मक प्रोग्रामिंग और चेनिंग उद्देश्यों के लिए Array.prototype.insert() का आविष्कार आवश्यक है। वास्तव में splice सही हो सकता है अगर यह पूरी तरह से अर्थहीन खाली सरणी के बजाय उत्परिवर्तित सरणी वापस कर दिया गया था। तो यहाँ यह जाता है

Array.prototype.insert = function(i,...rest){
  this.splice(i,0,...rest)
  return this
}

var a = [3,4,8,9];
document.write("<pre>" + JSON.stringify(a.insert(2,5,6,7)) + "</pre>");

ठीक है ठीक है Array.prototype.splice() एक मूल सरणी को Array.prototype.splice() और कुछ शिकायत कर सकते हैं कि "आपको संशोधित नहीं करना चाहिए कि आप क्या नहीं हैं" और यह भी सही हो सकता है। तो सार्वजनिक कल्याण के लिए मैं एक और Array.prototype.insert() देना Array.prototype.insert() जो मूल सरणी को म्यूटेट नहीं करता है। ये रहा;

Array.prototype.insert = function(i,...rest){
  return this.slice(0,i).concat(rest,this.slice(i));
}

var a = [3,4,8,9],
    b = a.insert(2,5,6,7);
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));


मैं इस मामले में शुद्ध जावास्क्रिप्ट का उपयोग करने की सलाह देता हूं, जावास्क्रिप्ट में कोई भी सम्मिलित विधि नहीं है, लेकिन हमारे पास एक विधि है जो एक अंतर्निहित ऐरे विधि है जो आपके लिए नौकरी करती है, इसे स्प्लिसे कहा जाता है ...

चलो देखते हैं कि splice क्या है () ...

Splice () विधि मौजूदा तत्वों को हटाकर और / या नए तत्व जोड़कर सरणी की सामग्री को बदलती है।

ठीक है, कल्पना करें कि हमारे पास नीचे यह सरणी है:

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

हम इस तरह 3 को हटा सकते हैं:

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

यह 3 वापस आ जाएगा, लेकिन अगर हम अब एआर की जांच करते हैं, तो हमारे पास है:

[1, 2, 4, 5]

अब तक, बहुत अच्छा है, लेकिन हम splice का उपयोग करके सरणी में एक नया तत्व कैसे जोड़ सकते हैं? चलो एआर में 3 वापस रखो ...

arr.splice(2, 0, 3);

चलो देखते हैं कि हमने क्या किया है ...

हम फिर से splice का उपयोग करते हैं, लेकिन इस बार दूसरे तर्क के लिए, हम 0 पास करते हैं, इसका मतलब है कि हम कोई आइटम हटाना नहीं चाहते हैं, लेकिन साथ ही, हम तीसरे तर्क को जोड़ते हैं जो 3 है जो दूसरी अनुक्रमणिका में जोड़ा जाएगा ...

आपको अवगत होना चाहिए, कि हम एक ही समय में हटा और जोड़ सकते हैं, उदाहरण के लिए अब हम कर सकते हैं:

arr.splice(2, 2, 3);

जो इंडेक्स 2 पर 2 आइटम हटा देगा, फिर इंडेक्स 2 पर 3 जोड़ें और परिणाम होगा:

[1, 2, 3, 5];

यह दिखा रहा है कि प्रत्येक आइटम स्प्लिस काम में कैसे होता है:

array.splice (प्रारंभ करें, हटाएं, आइटम 1, आइटम 2, item3 ...)


मैंने कोशिश की और यह ठीक काम कर रहा है!

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

इंडेक्स वह स्थिति है जहां आप तत्व डालना या हटाना चाहते हैं। 0 यानी दूसरे पैरामीटर इंडेक्स से हटाए जाने वाले तत्वों की संख्या को हटाते हैं, आइटम नई प्रविष्टियां हैं जिन्हें आप सरणी में बनाना चाहते हैं। यह एक या एक से अधिक हो सकता है।

initialArr.splice(2, 0, "Nigeria");
initialArr.splice(2, 0, "Australia","UK");

Array#reduce उपयोग के साथ, एक और संभावित समाधान।

var arr = ["apple", "orange", "raspberry"],
    arr2 = [1, 2, 4];

function insert(arr, item, index) {
    arr = arr.reduce(function(s, a, i) {
      i == index ? s.push(item, a) : s.push(a);
      return s;
    }, []);   
    console.log(arr);
}

insert(arr, "banana", 1);
insert(arr2, 3, 2);


एक विशिष्ट सूचकांक में एकल तत्व संलग्न करें

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

एक विशिष्ट अनुक्रमणिका में एकाधिक तत्व संलग्न करें

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





insert