javascript - জাভাস্ক্রিপ্ট মধ্যে অ্যারের উপাদান মুছে ফেলা-splice বনাম মুছে দিন




arrays array-splice (16)

মুছে ফেলুন : মুছে ফেলা বস্তু সম্পত্তি মুছে ফেলা হবে, কিন্তু অ্যারে reindex না বা তার দৈর্ঘ্য আপডেট হবে। এটি এটি অনির্ধারিত হিসাবে প্রদর্শিত হয়:

splice : আসলে উপাদান মুছে ফেলুন, অ্যারে reindexes, এবং তার দৈর্ঘ্য পরিবর্তন।

শেষ থেকে উপাদান মুছুন

arrName.pop();

প্রথম থেকে উপাদান মুছুন

arrName.shift();

মধ্য থেকে মুছে দিন

arrName.splice(starting index,number of element you wnt to delete);

Ex: arrName.splice(1,1);

শেষ থেকে এক উপাদান মুছে দিন

arrName.splice(-1);

অ্যারে সূচক সংখ্যা ব্যবহার করে মুছে দিন

 delete arrName[1];

Array.splice পদ্ধতি ব্যবহার করে অ্যারে উপাদানটি delete অপারেটরটি ব্যবহার করার মধ্যে পার্থক্য কী?

উদাহরণ স্বরূপ:

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

delete myArray[1];
//  or
myArray.splice (1, 1);

এমনকি যদি আমি অ্যারের উপাদানের মতো বস্তুর সাথে আমি মুছে ফেলতে পারি তবে splice পদ্ধতিটিও আছে কেন?


Array.remove () পদ্ধতি

জন রেসিগ , jQuery এর নির্মাতা একটি খুব সহজে Array.remove পদ্ধতি তৈরি করেছেন যা আমি সর্বদা আমার প্রোজেক্টগুলিতে ব্যবহার করি।

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

এবং এখানে কিভাবে এটি ব্যবহার করা যেতে পারে তার কিছু উদাহরণ:

// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);

জন এর ওয়েবসাইট


আমি অ্যারে থেকে একটি উপাদান প্রতিটি ঘটনার অপসারণ কিভাবে বুঝতে চেষ্টা করার সময় এই প্রশ্ন সম্মুখের দিকে stumbled। এখানে অ্যারে items থেকে প্রতিটি 'c' সরানোর জন্য splice এবং delete ফেলার একটি তুলনা

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

while (items.indexOf('c') !== -1) {
  items.splice(items.indexOf('c'), 1);
}

console.log(items); // ["a", "b", "d", "a", "b", "d"]

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

while (items.indexOf('c') !== -1) {
  delete items[items.indexOf('c')];
}

console.log(items); // ["a", "b", undefined, "d", "a", "b", undefined, "d"]

উপরে উল্লিখিত অনেক বার, splice() ব্যবহার করে একটি নিখুঁত ফিট মত মনে হয়। মোজিলা এ ডকুমেন্টেশন:

splice() পদ্ধতিটি বিদ্যমান উপাদানগুলি সরিয়ে এবং / অথবা নতুন উপাদান যোগ করে একটি অ্যারের সামগ্রী পরিবর্তন করে।

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

myFish.splice(2, 0, 'drum'); 
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1); 
// myFish is ["angel", "clown", "mandarin", "sturgeon"]

বাক্য গঠন

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

পরামিতি

শুরু

সূচী যা অ্যারে পরিবর্তন শুরু। অ্যারের দৈর্ঘ্যের চেয়ে বড় হলে প্রকৃত শুরুর সূচী অ্যারের দৈর্ঘ্যতে সেট করা হবে। নেতিবাচক, শেষ থেকে যে অনেক উপাদান শুরু হবে।

deleteCount

একটি পূর্ণসংখ্যা পুরানো অ্যারের উপাদান সংখ্যার নির্দেশ করে। যদি deleteCount 0 হয়, কোন উপাদান সরানো হয়। এই ক্ষেত্রে, আপনি অন্তত একটি নতুন উপাদান উল্লেখ করা উচিত। যদি deleteCount শুরুতে শুরু হওয়া অ্যারেতে অবশিষ্ট উপাদানগুলির সংখ্যা থেকে বেশি হয়, তবে অ্যারের শেষে সমস্ত উপাদান মুছে ফেলা হবে।

DeleteCount বাদ দেওয়া হলে, deleteCount সমান হবে (arr.length - start).

item1, item2, ...

উপাদান সূচী শুরুতে, অ্যারে যোগ করার উপাদান। যদি আপনি কোন উপাদান উল্লেখ না করেন তবে splice() কেবল অ্যারের থেকে উপাদানগুলি সরাবে।

ফেরত মূল্য

মুছে ফেলা উপাদান ধারণকারী একটি অ্যারে। যদি শুধুমাত্র একটি উপাদান সরানো হয়, একটি উপাদান একটি অ্যারে ফিরে। কোন উপাদান সরানো হয় না, একটি খালি অ্যারে ফিরে।

[...]


এটি সম্ভবত উল্লেখযোগ্য যে splice শুধুমাত্র অ্যারে কাজ করে। (অবজেক্টের বৈশিষ্ট্যগুলি ক্রমাগত ক্রম অনুসরণ করতে নির্ভর করে না।)

একটি বস্তুর কী-মান জোড়াটি সরাতে, আপনি যা চান তা মুছুন:

delete myObj.propName;     // , or:
delete myObj["propName"];  // Equivalent.

কারণ অ্যারের উপাদানটি কেবল অ্যারের উপাদান থেকে মুছে ফেলে, অ্যারের দৈর্ঘ্য পরিবর্তন হবে না। Splice বস্তু মুছে ফেলে এবং অ্যারে ছোট করে।

নিম্নলিখিত কোড "a", "b", "undefined", "d" প্রদর্শন করবে

myArray = ['a', 'b', 'c', 'd']; delete myArray[2];

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

যেখানে এটি "a", "b", "d" প্রদর্শন করবে

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

ঠিক আছে, কল্পনা করুন আমাদের নীচের এই অ্যারে আছে:

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

আসুন প্রথমে মুছে ফেলি:

delete arr[1];

এবং এই ফলাফল:

[1, empty, 3, 4, 5];

খালি! এবং এর এটি পেতে দিন:

arr[1]; //undefined

সুতরাং শুধু মান মুছে ফেলা হয়েছে এবং এটি এখন অনির্ধারিত , তাই দৈর্ঘ্য একই, এটি সত্য ফিরে আসবে ...

আসুন আমাদের অ্যারে পুনরায় সেট করুন এবং এই সময় splice সঙ্গে এটি করতে:

arr.splice(1, 1);

এবং এই এই সময় ফলাফল:

[1, 3, 4, 5];

যেমন আপনি অ্যারের দৈর্ঘ্য পরিবর্তন করেছেন এবং অ্যারে arr[1] এখন 3 হয় ...

এছাড়াও এটি একটি অ্যারেতে মুছে ফেলা আইটেমটি ফেরত দেবে যা [3] এই ক্ষেত্রে ...


তারা বিভিন্ন উদ্দেশ্য আছে বিভিন্ন জিনিস।

splice অ্যারে-নির্দিষ্ট এবং, যখন মুছে ফেলার জন্য ব্যবহৃত হয়, অ্যারের থেকে এন্ট্রিগুলি সরিয়ে দেয় এবং সমস্ত পূর্ববর্তী এন্ট্রিগুলিকে ফাঁক পূরণ করতে সরিয়ে নেয়। (এটি এন্ট্রি সন্নিবেশ করতে, বা একই সময়ে উভয়ই ব্যবহার করা যেতে পারে।) theArray.splice(x, 0) অ্যারের length পরিবর্তন করবে (অনুমান করে যে এটি একটি নন-আপ কল নয়: theArray.splice(x, 0) )।

delete অ্যারে নির্দিষ্ট নয়; এটি বস্তুর উপর ব্যবহারের জন্য ডিজাইন করা হয়েছে: এটি আপনার ব্যবহৃত বস্তুর থেকে একটি সম্পত্তি (কী / মান জোড়া) মুছে ফেলে। এটি শুধুমাত্র অ্যারেগুলিতে প্রযোজ্য কারণ জাভাস্ক্রিপ্টে মানক (উদাহরণস্বরূপ, অ-টাইপ করা) অ্যারেগুলি আসলেই অ্যারে নয় *, তারা নির্দিষ্ট বৈশিষ্ট্যগুলির জন্য বিশেষ হ্যান্ডলিংয়ের মতো বস্তু, যেমনগুলির নামগুলি "অ্যারে সূচী" (যা স্ট্রিং নাম হিসাবে defined "... যার সংখ্যাসূচক মান i পরিসীমা +0 ≤ i < 2^32-1 ") এবং length । যখন আপনি একটি অ্যারে এন্ট্রি delete জন্য মুছে delete ব্যবহার করেন, তখন এটি সমস্ত এন্ট্রি সরিয়ে দেয়; এটি ফাঁকা পূরণের জন্য এটি অনুসরণ করে অন্য এন্ট্রিগুলি সরানো হয় না, এবং তাই অ্যারে "অস্পষ্ট" হয়ে যায় (কিছু এন্ট্রি সম্পূর্ণরূপে অনুপস্থিত থাকে)। এটা length কোন প্রভাব আছে।

এই প্রশ্নের বর্তমান উত্তরগুলির একটি দম্পতি ভুলভাবে বলেছে যে delete ব্যবহার করে " undefined এন্ট্রি সেট করে"। এটা সঠিক নয়। এটি একটি ফাঁক রেখে, সম্পূর্ণরূপে এন্ট্রি (সম্পত্তি) অপসারণ

আসুন পার্থক্যগুলি বর্ণনা করতে কিছু কোড ব্যবহার করি:

console.log("Using `splice`:");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length);            // 5
a.splice(0, 1);
console.log(a.length);            // 4
console.log(a[0]);                // "b"

console.log("Using `delete`");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length);            // 5
delete a[0];
console.log(a.length);            // still 5
console.log(a[0]);                // undefined
console.log("0" in a);            // false
console.log(a.hasOwnProperty(0)); // false

console.log("Setting to `undefined`");
var a = ["a", "b", "c", "d", "e"];
console.log(a.length);            // 5
a[0] = undefined;
console.log(a.length);            // still 5
console.log(a[0]);                // undefined
console.log("0" in a);            // true
console.log(a.hasOwnProperty(0)); // true

* (যে আমার অ্যানিমিক সামান্য ব্লগে একটি পোস্ট)


বর্তমানে এই দুটি উপায় আছে

  1. splice ব্যবহার করে ()

    arrayObject.splice(index, 1);

  2. মুছে ফেলা ব্যবহার করে

    delete arrayObject[index];

কিন্তু আমি সর্বদা অ্যারে বস্তুর জন্য splice ব্যবহার এবং বস্তুর গুণাবলী জন্য মুছে ফেলার সুপারিশ কারণ মুছে ফেলা অ্যারের দৈর্ঘ্য আপডেট না।


যদি আপনি একটি বৃহত অ্যারে পুনরাবৃত্তি করতে চান এবং উপাদানগুলি নির্বাচন করে মুছে ফেলতে চান তবে প্রতিটি মুছে ফেলার জন্য splice () কে কল করা ব্যয়বহুল হবে কারণ splice () প্রতিটি সময় পরবর্তী উপাদানগুলিকে পুনরায় সূচক করতে হবে। কারণ অ্যারে জাভাস্ক্রিপ্টে সহযোগী হয়, এটি পৃথক উপাদানের মুছে ফেলার জন্য আরও কার্যকর হবে এবং তারপরে অ্যারের পুনরায়-সূচী করবে।

আপনি একটি নতুন অ্যারে নির্মাণ করে এটি করতে পারেন। যেমন

function reindexArray( array )
{
       var result = [];
        for( var key in array )
                result.push( array[key] );
        return result;
};

কিন্তু আমি মনে করি না আপনি আসল অ্যারেতে মূল মানগুলি সংশোধন করতে পারেন, যা আরো কার্যকর হবে - মনে হচ্ছে আপনাকে একটি নতুন অ্যারে তৈরি করতে হবে।

নোট করুন যে আপনি "অনির্দিষ্ট" এন্ট্রিগুলির জন্য চেক করার প্রয়োজন নেই কারণ এটি আসলে বিদ্যমান নয় এবং লুপ তাদের ফেরত দেয় না। এটি অ্যারে মুদ্রণের একটি আর্টিফ্যাক্ট যা তাদের অনির্ধারিত হিসাবে প্রদর্শন করে। তারা মেমরি বিদ্যমান উপস্থিত না।

আপনি যদি স্লাইস () এর মতো কিছু ব্যবহার করতে পারেন তবে এটি দুর্দান্ত হবে, যা দ্রুত হতে পারে তবে এটি পুনরায় সূচক না। কেউ ভাল উপায় জানেন?

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

reindexArray : function( array )
{
    var index = 0;                          // The index where the element should be
    for( var key in array )                 // Iterate the array
    {
        if( parseInt( key ) !== index )     // If the element is out of sequence
        {
            array[index] = array[key];      // Move it to the correct, earlier position in the array
            ++index;                        // Update the index
        }
    }

    array.splice( index );  // Remove any remaining elements (These will be duplicates of earlier items)
},

সবচেয়ে সহজ উপায় সম্ভবত

var myArray = ['a', 'b', 'c', 'd'];
delete myArray[1]; // ['a', undefined, 'c', 'd']. Then use lodash compact method to remove false, null, 0, "", undefined and NaN
myArray = _.compact(myArray); ['a', 'c', 'd'];

আশাকরি এটা সাহায্য করবে. রেফারেন্স: https://lodash.com/docs#compact


কোর জাভাস্ক্রিপ্ট থেকে 1.5 রেফারেন্স> অপারেটর> বিশেষ অপারেটর> অপারেটর মুছুন :

আপনি একটি অ্যারের উপাদান মুছে ফেলার সময়, অ্যারের দৈর্ঘ্য প্রভাবিত হয় না। উদাহরণস্বরূপ, যদি আপনি একটি [3] মুছে ফেলেন, একটি [4] এখনও একটি [4] এবং একটি [3] অনির্ধারিত। আপনি যদি অ্যারেটির শেষ উপাদানটি মুছে ফেলেন তবেও এটি হ'ল (একটি [a.length-1] মুছুন)।


delete ফেলা বস্তু সম্পত্তি মুছে delete হবে, কিন্তু অ্যারে reindex হবে না বা তার দৈর্ঘ্য আপডেট। এটি এটি অনির্ধারিত হিসাবে প্রদর্শিত হয়:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

মনে রাখবেন যে এটি আসলে undefined মানের সেট নয়, বরং অ্যারের থেকে সম্পত্তিটি সরানো হয়েছে, এটি অনির্ধারিত প্রদর্শিত হচ্ছে । অ্যারে লগ করার সময় Chrome dev সরঞ্জাম empty মুদ্রণ করে এই পার্থক্যটি পরিষ্কার করে।

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount) আসলে উপাদানটি মুছে ফেলে, অ্যারে reindexes, এবং তার দৈর্ঘ্য পরিবর্তন।

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]

splice সংখ্যাসূচক সূচক সঙ্গে কাজ করবে।

যখন delete অন্য ধরনের সূচক বিরুদ্ধে ব্যবহার করা যেতে পারে ..

উদাহরণ:

delete myArray['text1'];

function deleteFromArray(array, indexToDelete){
  var remain = new Array();
  for(var i in array){
    if(array[i] == indexToDelete){
      continue;
    }
    remain.push(array[i]);
  }
  return remain;
}

myArray = ['a', 'b', 'c', 'd'];
deleteFromArray(myArray , 0);

// ফলাফল: myArray = ['b', 'c', 'd'];


function remove_array_value(array, value) {
    var index = array.indexOf(value);
    if (index >= 0) {
        array.splice(index, 1);
        reindex_array(array);
    }
}
function reindex_array(array) {
   var result = [];
    for (var key in array) {
        result.push(array[key]);
    }
    return result;
}

উদাহরণ:

var example_arr = ['apple', 'banana', 'lemon'];   // length = 3
remove_array_value(example_arr, 'banana');

কলা মুছে ফেলা হয় এবং অ্যারের দৈর্ঘ্য = 2






delete-operator