javascript array - কিভাবে আমি জাভাস্ক্রিপ্ট একটি অ্যারে থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলতে পারি?




in definition (25)

আমার পূর্ণসংখ্যার একটি অ্যারে আছে, এবং আমি এটি যোগ করার জন্য .push() পদ্ধতিটি ব্যবহার করছি।

একটি অ্যারের থেকে একটি নির্দিষ্ট উপাদান মুছে ফেলার জন্য একটি সহজ উপায় আছে? array.remove(int); মত কিছু সমতুল্য array.remove(int);

আমি কোর জাভাস্ক্রিপ্ট ব্যবহার করতে হবে - কোন কাঠামো অনুমতি দেওয়া হয়।


Answers

আপনি একটি খালি স্পট রাখা বা না চান উপর নির্ভর করে।

যদি আপনি একটি খালি স্লট চান, মুছে দিন জরিমানা:

delete array[ index ];

যদি আপনি না করেন, আপনি splice পদ্ধতি ব্যবহার করা উচিত:

array.splice( index, 1 );

এবং যদি আপনি সেই আইটেমের মানটির প্রয়োজন বোধ করেন, তবে আপনি কেবল ফেরত অ্যারের উপাদানটি সংরক্ষণ করতে পারেন:

var value = array.splice( index, 1 )[0];

যদি আপনি কোনও ক্রমে এটি করতে চান তবে আপনি array.pop() জন্য array.pop() কে শেষ বা array.shift() জন্য ব্যবহার করতে পারেন (এবং উভয় আইটেমটির array.shift() )।

এবং যদি আপনি আইটেমের সূচীটি জানেন না, তবে আপনি এটি পেতে একটি array.indexOf( item ) তে array.indexOf( item ) ব্যবহার করতে পারেন। array.indexOf( item ) যদি কোনও সূচী বা -1 পাওয়া না থাকে।


আপনি আপনার অ্যারের আপনার অ্যারে mutate করা উচিত নয়। এই কার্যকরী প্রোগ্রামিং প্যাটার্ন বিরুদ্ধে। আপনি যা করতে পারেন তা হল অ্যারে উল্লেখ না করে একটি নতুন অ্যারে তৈরি করুন যা আপনি এস 6 পদ্ধতির filter ব্যবহার করে ডেটা পরিবর্তন করতে চান;

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

ধরুন আপনি অ্যারে থেকে 5 মুছে ফেলতে চান তবে আপনি কেবল এটির মতো এটি করতে পারেন।

myArray = myArray.filter(value => value !== 5);

এটি আপনি যে মূল্যটি সরাতে চেয়েছিলেন তার জন্য আপনাকে একটি নতুন অ্যারে দেবে। সুতরাং ফলাফল হতে হবে

 [1,2,3,4,6]; // 5 has been removed from this array

আরো বোঝার জন্য আপনি Array.filter এ MDN ডকুমেন্টেশনটি পড়তে পারেন filter


আপনি filter পদ্ধতির সাথে সহজে এটি করতে পারেন:

function remove(arrOriginal, elementToRemove){
    return arrOriginal.filter(function(el){return el !== elementToRemove});
}
console.log( remove([1, 2, 1, 0, 3, 1, 4], 1) );

এটি অ্যারে থেকে সমস্ত উপাদানগুলি সরিয়ে নেয় এবং আরও দ্রুত কাজ করে, তারপর স্লাইস এবং indexOf এর সমন্বয়


এই কোড পরীক্ষা করে দেখুন। এটা প্রতিটি প্রধান ব্রাউজারে কাজ করে।

remove_item = function (arr, value) {
    var b = '';
    for (b in arr) {
        if (arr[b] === value) {
            arr.splice(b, 1);
            break;
        }
    }
    return arr;
}

এই ফাংশন কল

remove_item(array,value);

আপনি অ্যারে জটিল বস্তু আছে যদি আপনি ফিল্টার ব্যবহার করতে পারেন? যেখানে $ .inArray বা array.splice ব্যবহার করা সহজ নয়। বস্তু সম্ভবত অ্যারের মধ্যে অগভীর হয়।

যেমন যদি আপনার আইডি ক্ষেত্রের সাথে একটি বস্তু থাকে এবং আপনি অ্যারের থেকে বস্তুটি সরাতে চান:

this.array = this.array.filter(function(element, i) {
    return element.id !== idToRemove;
});

ঠিক আছে, উদাহরণস্বরূপ আপনি নীচের অ্যারে হচ্ছে:

var num = [1, 2, 3, 4, 5];

এবং আমরা নম্বর 4 মুছে ফেলতে চাই, আপনি কেবল নীচের কোডটি করতে পারেন:

num.splice(num.indexOf(4), 1); //num will be [1, 2, 3, 5];

আপনি যদি এই ফাংশনটি পুনঃব্যবহার করেন, তবে আপনি পুনঃব্যবহারযোগ্য ফাংশন লিখুন যা নীচের অ্যারে ফাংশনে সংযুক্ত হবে:

Array.prototype.remove = Array.prototype.remove || function(x) {
  const i = this.indexOf(x);
  if(i===-1) return;
  this.splice(i, 1); //num.remove(5) === [1, 2, 3];
}

কিন্তু আরেতে কয়েকটি [5] গুলি এর পরিবর্তে নীচের অ্যারে থাকলে কীভাবে?

var num = [5, 6, 5, 4, 5, 1, 5];

আমাদের সকলকে পরীক্ষা করার জন্য আমাদের একটি লুপ দরকার, তবে সহজ এবং আরও কার্যকর উপায় অন্তর্নির্মিত জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করা হচ্ছে, তাই আমরা এমন একটি ফাংশন লিখি যা এর পরিবর্তে নীচের মত ফিল্টার ব্যবহার করে:

const _removeValue = (arr, x) => arr.filter(n => n!==x);
//_removeValue([1, 2, 3, 4, 5, 5, 6, 5], 5) //return [1, 2, 3, 4, 6]

এছাড়াও তৃতীয় পক্ষের লাইব্রেরিগুলি রয়েছে যা লোডশ বা আন্ডারস্কোরের মতো এটি করতে আপনাকে সাহায্য করে, আরো তথ্যের জন্য lodash _.pull, _.pullAt_ _without।


সমস্ত উত্তরগুলির উপর ভিত্তি করে যা মূলত সঠিক এবং বিবেচ্য সর্বোত্তম অনুশীলনের পরামর্শ দেওয়া হয়েছে (বিশেষত Array.prototype ব্যবহার করে না), আমি নিচের কোডটি দিয়ে এসেছি:

function arrayWithout(arr, values) {
  var isArray = function(canBeArray) {
    if (Array.isArray) {
      return Array.isArray(canBeArray);
    }
    return Object.prototype.toString.call(canBeArray) === '[object Array]';
  };

  var excludedValues = (isArray(values)) ? values : [].slice.call(arguments, 1);
  var arrCopy = arr.slice(0);

  for (var i = arrCopy.length - 1; i >= 0; i--) {
    if (excludedValues.indexOf(arrCopy[i]) > -1) {
      arrCopy.splice(i, 1);
    }
  }

  return arrCopy;
}

উপরের কাজটি পর্যালোচনা করার পরেও এটি সূক্ষ্ম কাজ করে, আমি বুঝতে পারছি কিছু কার্যকারিতা উন্নতি হতে পারে। এছাড়াও ES5 এর পরিবর্তে ES6 ব্যবহার করা অনেক ভাল পদ্ধতি। যে শেষ, এই উন্নত কোড:

const arrayWithoutFastest = (() => {
  const isArray = canBeArray => ('isArray' in Array) 
    ? Array.isArray(canBeArray) 
    : Object.prototype.toString.call(canBeArray) === '[object Array]';

  let mapIncludes = (map, key) => map.has(key);
  let objectIncludes = (obj, key) => key in obj;
  let includes;

  function arrayWithoutFastest(arr, ...thisArgs) {
    let withoutValues = isArray(thisArgs[0]) ? thisArgs[0] : thisArgs;

    if (typeof Map !== 'undefined') {
      withoutValues = withoutValues.reduce((map, value) => map.set(value, value), new Map());
      includes = mapIncludes;
    } else {
      withoutValues = withoutValues.reduce((map, value) => { map[value] = value; return map; } , {}); 
      includes = objectIncludes;
    }

    const arrCopy = [];
    const length = arr.length;

    for (let i = 0; i < length; i++) {
      // If value is not in exclude list
      if (!includes(withoutValues, arr[i])) {
        arrCopy.push(arr[i]);
      }
    }

    return arrCopy;
  }

  return arrayWithoutFastest;  
})();

ব্যবহারবিধি:

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

arrayWithoutFastest(arr, 1); // will return array [2,3,4,5,"name", false]
arrayWithoutFastest(arr, 'name'); // will return [2,3,4,5, false]
arrayWithoutFastest(arr, false); // will return [2,3,4,5]
arrayWithoutFastest(arr,[1,2]); // will return [3,4,5,"name", false];
arrayWithoutFastest(arr, {bar: "foo"}); // will return the same array (new copy)

আমি বর্তমানে একটি ব্লগ পোস্ট লিখছি যার মধ্যে আমি কোন সমস্যা ছাড়াই অ্যারের জন্য কয়েকটি সমাধান বেঞ্চমার্ক করেছি এবং এটি চালানোর সময়টি তুলনা করে। আমি এই পোস্টটি শেষ করার পরে লিঙ্কটি দিয়ে এই আপডেটটি আপডেট করব। শুধু আপনাকে জানাতে, আমি লাউডস এর বিরুদ্ধে উপরে তুলনা করেছি এবং ব্রাউজার সমর্থন করলে Map, এটি লোডশে! লক্ষ্য করুন যে আমি ব্যবহার করছি না Array.prototype.indexOfঅথবা Array.prototype.includesexlcude ভ্যালুগুলিকে মোড়ানো Mapঅথবা Objectদ্রুত অনুসন্ধানের জন্য তৈরি করছি! ( https://jsperf.com/array-without-benchmark-against-lodash )


আমি আপনি array.remove(int) আচরণ করার আশা করছেন কিভাবে জানি না। তিনটি সম্ভাবনার কথা আমি ভাবতে পারি যা আপনি চাইছেন।

একটি সূচীতে একটি অ্যারে একটি উপাদান মুছে ফেলার জন্য i :

array.splice(i, 1);

যদি আপনি অ্যারের থেকে মান number সহ প্রতিটি উপাদান সরাতে চান:

for(var i = array.length - 1; i >= 0; i--) {
    if(array[i] === number) {
       array.splice(i, 1);
    }
}

যদি আপনি কেবল সূচীতে উপাদানটি তৈরি করতে চান তবে i আর বিদ্যমান নেই, তবে আপনি অন্যান্য উপাদানগুলির সূচী পরিবর্তন করতে চান না:

delete array[i];

আপডেট: আপনি যদি ECMAScript 2015 (পূর্বে ES6 নামে পরিচিত) ব্যবহার করতে না পারেন তবে এই পদ্ধতিটি সুপারিশ করা হয়। আপনি এটি ব্যবহার করতে পারেন, এখানে অন্যান্য উত্তর অনেক নিরপেক্ষ বাস্তবায়ন প্রদান।

এখানে এই সমস্যাটি আপনার সমস্যার সমাধান করবে, এবং শুধুমাত্র 1 (বা একটি নির্দিষ্ট মান) পরিবর্তে যুক্তিটির সমস্ত ঘটনা মুছে ফেলবে।

Array.prototype.destroy = function(obj){
    // Return null if no objects were found and removed
    var destroyed = null;

    for(var i = 0; i < this.length; i++){

        // Use while-loop to find adjacent equal objects
        while(this[i] === obj){

            // Remove this[i] and store it within destroyed
            destroyed = this.splice(i, 1)[0];
        }
    }

    return destroyed;
}

ব্যবহার:

var x = [1, 2, 3, 3, true, false, undefined, false];

x.destroy(3);         // => 3
x.destroy(false);     // => false
x;                    // => [1, 2, true, undefined]

x.destroy(true);      // => true
x.destroy(undefined); // => undefined
x;                    // => [1, 2]

x.destroy(3);         // => null
x;                    // => [1, 2]

আপনি সরিয়ে ফেলতে চান এমন অ্যারের উপাদানটির index খুঁজুন, তারপর সেই splice সহ সরান।

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

var array = [2, 5, 9];
console.log(array)
var index = array.indexOf(5);
if (index > -1) {
  array.splice(index, 1);
}
// array = [2, 9]
console.log(array);

splice দ্বিতীয় পরামিতি উপাদান অপসারণের সংখ্যা। দ্রষ্টব্য যে splice জায়গায় অ্যারে সংশোধন করে এবং সরানো হয়েছে এমন উপাদান ধারণকারী একটি নতুন অ্যারে প্রদান করে।

দ্রষ্টব্য : indexOf জন্য ব্রাউজার সমর্থন সীমিত; এটি ইন্টারনেট এক্সপ্লোরার 7 এবং 8 তে সমর্থিত নয়।

যদি আপনি একটি অসমর্থিত ব্রাউজারে polyfill তবে নিম্নোক্ত polyfill চেষ্টা করুন। এখানে এই polyfill সম্পর্কে আরও তথ্য খুঁজুন।

Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
    var a;
    if (null == this) throw new TypeError('"this" is null or not defined');
    var c = Object(this),
        b = c.length >>> 0;
    if (0 === b) return -1;
    a = +e || 0;
    Infinity === Math.abs(a) && (a = 0);
    if (a >= b) return -1;
    for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
        if (a in c && c[a] === d) return a;
        a++
    }
    return -1
});

2016 অক্টোবর এ সম্পাদিত

  • এটা সহজ, স্বজ্ঞাত এবং সুস্পষ্ট ( https://en.wikipedia.org/wiki/Occam%27s_razor )
  • এটি অপ্রয়োজনীয় (মূল অ্যারে অপরিবর্তিত থাকার)
  • যদি আপনার ব্রাউজার তাদের সমর্থন না করে তবে স্ট্যান্ডার্ড JS ফাংশন দিয়ে এটি করুন - পলিফিল ব্যবহার করুন

এই কোড উদাহরণে আমি অ্যারের থেকে অযাচিত আইটেমগুলি সরিয়ে ফেলতে "array.filter (...)" ফাংশন ব্যবহার করি, এই ফাংশনটি মূল অ্যারে পরিবর্তন করে এবং একটি নতুন তৈরি করে না। যদি আপনার ব্রাউজার এই ফাংশনটিকে সমর্থন করে না (যেমন সংস্করণ 9 এর আগে IE বা সংস্করণ 1.5 এর আগে ফায়ারফক্স), মোজিলা থেকে ফিল্টার পলিফিল ব্যবহার করার কথা বিবেচনা করুন।

আইটেম অপসারণ (ECMA-262 সংস্করণ 5 কোড উর্ধ্বতন oldstyle জেএস)

var value = 3

var arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(function(item) { 
    return item !== value
})

console.log(arr)
// [ 1, 2, 4, 5 ]

আইটেম অপসারণ (ES2015 কোড)

let value = 3

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => item !== value)

console.log(arr)
// [ 1, 2, 4, 5 ]

গুরুত্বপূর্ণ ES2015 "() => {}" তীর ফাংশন সিনট্যাক্স IE তে সবথেকে সমর্থিত নয়, 45 সংস্করণ আগে Chrome, 22 সংস্করণ আগে ফায়ারফক্স, 10 সংস্করণ আগে সাফারি। পুরানো ব্রাউজারগুলিতে ES2015 সিনট্যাক্স ব্যবহার করতে আপনি BabelJS ব্যবহার করতে পারেন

একাধিক আইটেম অপসারণ (ES2016 কোড)

এই পদ্ধতির একটি অতিরিক্ত সুবিধা আপনি একাধিক আইটেম অপসারণ করতে পারেন

let forDeletion = [2, 3, 5]

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => !forDeletion.includes(item))
// !!! Read below about array.includes(...) support !!!

console.log(arr)
// [ 1, 4 ]

গুরুত্বপূর্ণ "array.includes (...)" ফাংশনটি IE তে সমর্থিত নয়, 47 সংস্করণ আগে Chrome, 43 সংস্করণ আগে ফায়ারফক্স, 9 সংস্করণের আগে সাফারি এবং 14 সংস্করণে এজের আগে 14 টি সংস্করণ রয়েছে তাই এখানে মোজিলা থেকে পলিফিল

একাধিক আইটেম অপসারণ (কাটিং-প্রান্ত পরীক্ষামূলক জাভাস্ক্রিপ্ট ES2018?)

// array-lib.js

export function remove(...forDeletion) {
    return this.filter(item => !forDeletion.includes(item))
}

// main.js

import { remove } from './array-lib.js'

let arr = [1, 2, 3, 4, 5, 3]

// :: This-Binding Syntax Proposal
// using "remove" function as "virtual method"
// without extending Array.prototype
arr = arr::remove(2, 3, 5)

console.log(arr)
// [ 1, 4 ]

BabelJS এ নিজেকে চেষ্টা করুন :)

উল্লেখ


একটি অ্যারে থেকে অপসারণ করার জন্য আমার আরেকটি ভাল সমাধান আছে:

var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

filter


একটি আরো আধুনিক, ECMAScript 2015 (পূর্বে Harmony বা ES 6 হিসাবে পরিচিত) পদ্ধতির। প্রদত্ত:

const items = [1, 2, 3, 4];
const index = 2;

তারপর:

items.filter((x, i) => i !== index);

ফলনশীল:

[1, 2, 4]

এটি ব্রাউজার জুড়ে ভাল সমর্থিত তা নিশ্চিত করতে আপনি Babel এবং একটি পলিফিল পরিষেবা ব্যবহার করতে পারেন ।


ES6 এবং পরিবর্তন ছাড়া: (অক্টোবর 2016)

const removeByIndex = (list, index) =>
  [
    ...list.slice(0, index),
    ...list.slice(index + 1)
  ];

তারপর:

removeByIndex([33,22,11,44],1) //=> [33,11,44]

আমি ইতিমধ্যে উত্তর অনেক আছে জানেন, কিন্তু তাদের অনেকেই সমস্যা জটিল জটিল বলে মনে হচ্ছে। এখানে একটি কী এর সব উদাহরণ সরানোর একটি সহজ, পুনরাবৃত্তিমূলক উপায় - সূচী পর্যন্ত স্বয়ং কল পাওয়া যায় না। হ্যাঁ, এটি শুধুমাত্র ব্রাউজারগুলিতে কাজ করে indexOfতবে এটি সহজ এবং সহজে পলিফিল করা যায়।

একা একা ফাংশন

function removeAll(array, key){
    var index = array.indexOf(key);

    if(index === -1) return;

    array.splice(index, 1);
    removeAll(array,key);
}

প্রোটোটাইপ পদ্ধতি

Array.prototype.removeAll = function(key){
    var index = this.indexOf(key);

    if(index === -1) return;

    this.splice(index, 1);
    this.removeAll(key);
}

আপনার 1 থেকে 9 অ্যারের আছে এবং আপনি নীচের কোড ব্যবহার 5 মুছে ফেলতে চান।

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return m !== 5;
});

console.log("new Array, 5 removed", newNumberArray);

যদি আপনি একাধিক মান প্রাক্তন করতে চান: - 1,7,8

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];

var newNumberArray = numberArray.filter(m => {
  return (m !== 1) && (m !== 7) && (m !== 8);
});

console.log("new Array, 5 removed", newNumberArray);

যদি আপনি অ্যারের মধ্যে অ্যারে মান অপসারণ করতে চান প্রাক্তন: - [3,4,5]

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removebleArray = [3,4,5];

var newNumberArray = numberArray.filter(m => {
    return !removebleArray.includes(m);
});

console.log("new Array, [3,4,5] removed", newNumberArray);

সমর্থিত ব্রাউজার link


আমি জাভাস্ক্রিপ্ট চমত্কার নতুন এবং এই কার্যকারিতা প্রয়োজন। আমি শুধু এই লিখেছি:

function removeFromArray(array, item, index) {
  while((index = array.indexOf(item)) > -1) {
    array.splice(index, 1);
  }
}

তারপর যখন আমি এটি ব্যবহার করতে চান:

//Set-up some dummy data
var dummyObj = {name:"meow"};
var dummyArray = [dummyObj, "item1", "item1", "item2"];

//Remove the dummy data
removeFromArray(dummyArray, dummyObj);
removeFromArray(dummyArray, "item2");

আউটপুট - হিসাবে প্রত্যাশিত। ["আইটেম 1", "আইটেম 1"]

আপনার কাছে আমার চেয়ে বিভিন্ন প্রয়োজন থাকতে পারে, তাই আপনি সহজেই এটির জন্য এটি সংশোধন করতে পারেন। আমি আশা করি এটা কারো সাহায্যে লাগবে.


indexOf বা splice ব্যবহার করার প্রয়োজন নেই। যাইহোক, যদি আপনি শুধুমাত্র একটি উপাদান একটি ঘটনার অপসারণ করতে চান ভাল সঞ্চালন।

খুঁজুন এবং সরান (স্থানান্তর):

function move(arr, val) {
  var j = 0;
  for (var i = 0, l = arr.length; i < l; i++) {
    if (arr[i] !== val) {
      arr[j++] = arr[i];
    }
  }
  arr.length = j;
}

IndexOf এবং splice (indexof) ব্যবহার করুন:

function indexof(arr, val) {
  var i;
  while ((i = arr.indexOf(val)) != -1) {
    arr.splice(i, 1);
  }
}

শুধুমাত্র splice (splice) ব্যবহার করুন:

function splice(arr, val) {
  for (var i = arr.length; i--;) {
    if (arr[i] === val) {
      arr.splice(i, 1);
    }
  }
}

1000 উপাদানগুলির সাথে অ্যারের জন্য নোডজেস-এ রান-বার (10000 রান বেশি):

indexof সরানো চেয়ে প্রায় 10x ধীর। এমনকি যদি indexOf কলটি সরানোর মাধ্যমে উন্নত করা হয় তবে এটি সরানো থেকে অনেক খারাপ সঞ্চালিত হয়।

Remove all occurrences:
    move 0.0048 ms
    indexof 0.0463 ms
    splice 0.0359 ms

Remove first occurrence:
    move_one 0.0041 ms
    indexof_one 0.0021 ms

Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}
//Call like
[1, 2, 3, 4].remByVal(3);

Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
}

var rooms = ['hello', 'something']

rooms = rooms.remByVal('hello')

console.log(rooms)


জন রেসিগ একটি ভাল বাস্তবায়ন পোস্ট করেছেন :

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

আপনি যদি কোনও গ্লোবাল অবজেক্ট প্রসারিত করতে না চান তবে আপনি নীচের মতো কিছু করতে পারেন, পরিবর্তে:

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

তবে আমি এই পোস্টটি পোস্ট করার মূল কারণ হল সেই পৃষ্ঠাটির মন্তব্যগুলিতে প্রস্তাবিত বিকল্প বাস্তবায়নের বিরুদ্ধে ব্যবহারকারীদের সতর্ক করা (ডিসেম্বর 14, 2007):

Array.prototype.remove = function(from, to){
  this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to);
  return this.length;
};

এটি প্রথমে ভালভাবে কাজ করে বলে মনে হচ্ছে, তবে একটি বেদনাদায়ক প্রক্রিয়ার মাধ্যমে আমি এটি অ্যারেতে শেষ উপাদান থেকে দ্বিতীয়টি সরানোর চেষ্টা করার সময় ব্যর্থ হয়েছি। উদাহরণস্বরূপ, যদি আপনার একটি 10-উপাদান অ্যারে থাকে এবং আপনি এটির সাথে 9 ম উপাদানটি সরাতে চেষ্টা করেন:

myArray.remove(8);

আপনি একটি 8-উপাদান অ্যারের সাথে শেষ। জানি না কেন তবে আমি জন এর বাস্তব বাস্তবায়ন নিশ্চিত এই সমস্যা নেই।


  Array.prototype.removeItem = function(a) {
            for (i = 0; i < this.length; i++) {
                if (this[i] == a) {
                    for (i2 = i; i2 < this.length - 1; i2++) {
                        this[i2] = this[i2 + 1];
                    }
                    this.length = this.length - 1
                    return;
                }
            }
        }

    var recentMovies = ['Iron Man', 'Batman', 'Superman', 'Spiderman'];
    recentMovies.removeItem('Superman');

Underscore.js একাধিক ব্রাউজার সঙ্গে সমস্যা সমাধানের জন্য ব্যবহার করা যেতে পারে। উপস্থিত থাকলে এটি বিল্ড ব্রাউজার পদ্ধতি ব্যবহার করে। যদি তারা পুরোনো ইন্টারনেট এক্সপ্লোরার সংস্করণের ক্ষেত্রে অনুপস্থিত থাকে তবে এটি নিজস্ব কাস্টম পদ্ধতি ব্যবহার করে।

অ্যারের থেকে উপাদানগুলি সরানোর জন্য একটি সহজ উদাহরণ (ওয়েবসাইট থেকে):

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]

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

var my_array = [1,2,3,4,5,6];
delete my_array[4];
console.log(my_array.filter(function(a){return typeof a !== 'undefined';}));

প্রদর্শন করা উচিত [1, 2, 3, 4, 6]


দুটি প্রধান পদ্ধতি রয়েছে:

  1. splice () : anArray.splice(index, 1);

  2. মুছে ফেলুন : delete anArray[index];

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

মনে রাখবেন যে যখন আপনি কোন অ্যারের জন্য delete anArray.length তখন আপনি anArray.length জন্য ভুল ফলাফল পেতে anArray.length । অন্য কথায়, delete ফেলুন উপাদান delete ফেলবে কিন্তু দৈর্ঘ্য সম্পত্তির মান আপডেট করবে না।

আপনি ডিল ব্যবহার করার পরে সূচক সংখ্যাগুলিতে গর্ত থাকতে পারে বলে আশা করতে পারেন, উদাহরণস্বরূপ আপনি সূচী 1,3,4,8,9,11 থাকা এবং এটি মুছে ফেলার আগে এটির দৈর্ঘ্য হিসাবে শেষ হতে পারে। যে ক্ষেত্রে, loops for সূচী সমস্ত ক্র্যাশ হবে, যেহেতু সূচী আর ক্রমিক।

আপনি যদি কিছু কারণে delete ব্যবহার করতে বাধ্য হন, তবে আপনাকে for each লুপগুলির for each ব্যবহার করা উচিত যখন আপনি অ্যারেগুলির মাধ্যমে লুপ করতে হবে। আসলে, সর্বদা সম্ভব হলে, loops জন্য সূচী ব্যবহার করে এড়াতে। এইভাবে কোডটি আরো জোরালো এবং সূচীগুলির সাথে সমস্যাগুলির কম প্রবণ হতে পারে।


var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]





javascript arrays