জাভাস্ক্রিপ্ট অ্যারে অনুসন্ধান এবং স্ট্রিং অপসারণ?


133

আমার আছে:

var array = new Array();
array.push("A");
array.push("B");
array.push("C");

আমি কিছু করতে সক্ষম হতে চাই:

array.remove("B");

তবে কোনও সরানোর কাজ নেই। আমি কীভাবে এটি সম্পাদন করব?


5
এর কৌশল .indexOf()এবং এর সমন্বয় করা .splice()উচিত। অথবা হতে পারে, বিকল্পভাবে .filter(),।
মার্ক বি

1
এখানে দেখুন: stackoverflow.com/questions/3954438/…
benedict_w

উত্তর:


185

আমি আসলে এই থ্রেডটিকে আরও সাম্প্রতিক 1-লাইন সমাধান দিয়ে আপডেট করছি:

let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']

মূলত ধারণাটি হ'ল যে উপাদানটি আপনি মুছতে চান তার চেয়ে আলাদা আলাদা আলাদা উপাদান নির্বাচন করে অ্যারে ফিল্টার করা।

দ্রষ্টব্য: সমস্ত ঘটনা সরিয়ে ফেলবে।

সম্পাদনা করুন:

আপনি যদি কেবলমাত্র প্রথম ঘটনাটি সরাতে চান:

t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']

1
এই সমাধানটি অ্যারের একটি অনুলিপি প্রদান করে, তবে স্প্লাইস ব্যবহার করে স্থানের উপাদানগুলি সরিয়ে দেয়। আপনি যা চয়ন করেন তা প্রসঙ্গে নির্ভর করে।
twhitehead

6
এটি রেডাক্স স্টাফের জন্য উপযুক্ত যেখানে আপনাকে নতুন রাষ্ট্র ফিরিয়ে দিতে হবে।
কলিনওয়ং

@ রিগিস আসলে নেই, অ্যারেফিল্টার একটি নতুন অ্যারে ফেরত দেয়। সুতরাং arr.filter (e => e! == 'B') আরআর পরিবর্তন করবে না। অথবা আমি আপনার মন্তব্যটি সঠিকভাবে বুঝতে পারি না?
Tyrannas

এটি করার জন্য কি কোনও পদ্ধতি আছে তবে প্রথম ঘটনাটি বন্ধ করার জন্য? সুতরাং যদি 5 'বি'কে কেবল একটি সরাতে হয়?
এরি

1
@ অরি আমি কেবলমাত্র একটি উপাদান অপসারণের জন্য উত্তর আপডেট করেছি
টায়রানাস

171

বিপরীত ক্রমে তালিকাটি লুপ করুন এবং .spliceপদ্ধতিটি ব্যবহার করুন ।

var array = ['A', 'B', 'C']; // Test
var search_term = 'B';

for (var i=array.length-1; i>=0; i--) {
    if (array[i] === search_term) {
        array.splice(i, 1);
        // break;       //<-- Uncomment  if only the first term has to be removed
    }
}

বিপরীত ক্রমটি গুরুত্বপূর্ণ যখন অনুসন্ধান শব্দটির সমস্ত উপস্থিতি অপসারণ করতে হয়। অন্যথায়, কাউন্টারটি বাড়বে, এবং আপনি উপাদানগুলি এড়িয়ে যাবেন।

যখন কেবল প্রথম ঘটনাটি সরিয়ে ফেলতে হবে, নিম্নলিখিতগুলিও কাজ করবে:

var index = array.indexOf(search_term);    // <-- Not supported in <IE9
if (index !== -1) {
    array.splice(index, 1);
}

1
আমি অনুমান করছি কারণ এটি বিপরীতে পুনরাবৃত্তি করতে কিছুটা দ্রুত হওয়া উচিত।
বেন ক্লেটন

1
@ বেনক্লেটন: ধন্যবাদ FWIW, জাভাস্ক্রিপ্টে, এটি নির্ভরযোগ্যভাবে সত্য নয়। গণনাটি 0স্বয়ংক্রিয়ভাবে এটির মতো দ্রুত হয় না, বলুন, সি। যতক্ষণ না আপনি সীমাটি ক্যাশে করেন অবশ্যই, যা প্রথম ম্যাচের পরেও চলতে থাকলে বিষয়গুলিকে জটিল করে তুলবে (তবে আপনি এটি থামিয়ে রাখেন না)।
টিজে ক্রোডার

আমরা যদি গতিতে যাচ্ছি কেন কেন ব্যবহার করবেন না -? : ডি
স্নুফ্লিউপাগাস

11
এটি গতির কথা নয়, এমনকি তিনি তার উত্তরেও বলেছেন। এটি স্কাইপিং উপাদানগুলির সম্পর্কে। আপনি যদি 5 নম্বরে আছেন এবং আপনি সেই অবস্থানটি বিভক্ত করেন তবে 6 অবস্থানের অবস্থানের এলিমেন্ট ফর্মিলি এখন 5-এ রয়েছে । তবুও, আপনার লুপ-কাউন্টারটি বৃদ্ধি পায়, পরবর্তী পুনরাবৃত্তিটি অবস্থান 6 হয় এবং এটিই আপনি কোনও আইটেম এড়িয়ে যান। এ কারণেই এটি বিপরীত ক্রমে।
অ্যান্থেস

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

24

ওয়ান লাইনারের তালিকা

আসুন এই অ্যারেটির জন্য এই সমস্যাটি সমাধান করুন:

var array = ['A', 'B', 'C'];

1. শুধুমাত্র প্রথমটি সরান: আপনি যদি নিশ্চিত হন যে আইটেমটির অস্তিত্ব রয়েছে

array.splice(array.indexOf('B'), 1);

২. কেবলমাত্র সর্বশেষটি সরান: আপনি যদি নিশ্চিত হন যে আইটেমটির অস্তিত্ব রয়েছে

array.splice(array.lastIndexOf('B'), 1);

৩. সমস্ত উপস্থিতি সরান:

array = array.filter(v => v !== 'B'); 

21

ডেমো

আপনি যা অনুসন্ধান করছেন তার অবস্থান অনুসন্ধান করতে হবে এবং .indexOf()তারপরে এটি সরিয়ে ফেলুন.splice()

function remove(arr, what) {
    var found = arr.indexOf(what);

    while (found !== -1) {
        arr.splice(found, 1);
        found = arr.indexOf(what);
    }
}

var array = new Array();
array.push("A");
array.push("B");
array.push("C");
    
remove(array, 'B');
alert(array)​​​​;

এটি সমস্ত ঘটনাগুলির যত্ন নেবে।


ব্রাউজারে সমর্থন করে না জন্য .indexOf()আপনি যোগ করতে পারেন এই আপনার জাভাস্ক্রিপ্ট ফাইলে।
কিওয়ারটিমক

হ্যাঁ, মার্জিত আপনার যদি কেবলমাত্র কয়েকটি উপাদান অপসারণের জন্য বিকল্পের প্রয়োজন হয় তবে উদাহরণস্বরূপ কেবল প্রথমটি: একই আপডেট করা: jsfiddle.net/qpZFd/9
সেবিলাস

আমি সবসময় নিম্নলিখিত ত্রুটির পাবেন: Uncaught ReferenceError: array is not defined। কি সমস্যা?
প্যাথ্রোস

আপনি যদি এই পথে যাচ্ছেন তবে আপনি সহজেই আরও কিছুটা সুবিধা নিতে পারেন .indexOf()। আপনি যদি found.indexOf()found = arr.indexOf(what, found);
ওয়েট

14

কেবল

array.splice(array.indexOf(item), 1);

হ্যাঁ, -1যদি কিছু না পাওয়া যায় এবং ওফস, সূচকগুলি ছাড়া ফিরে আসবে তবে স্প্লাইস অ্যারের প্রান্ত থেকে 1 টি উপাদান মুছে ফেলবে
রিকি স্প্যানিশ

2

সহজ সমাধান (ES6)

আপনার যদি সদৃশ উপাদান না থাকে

Array.prototype.remove = function(elem) {
  var indexElement = this.findIndex(el => el === elem);
  if (indexElement != -1)
    this.splice(indexElement, 1);
  return this;
};   

অনলাইন ডেমো


কোনও মিল না পাওয়া গেলে এই সমাধানটি সর্বদা সর্বশেষ উপাদানটিকে সরিয়ে দেয়।
মার্কাস এর

1

আপনাকে নিজের মুছে ফেলার কথা লিখতে হবে। আপনি অ্যারের উপরে লুপ করতে পারেন, আপনি যে আইটেমটি সরাতে চান তার সূচিটি ধরতে পারেন spliceএবং এটি অপসারণ করতে ব্যবহার করতে পারেন।

বিকল্পভাবে, আপনি একটি নতুন অ্যারে তৈরি করতে পারেন, বর্তমান অ্যারের উপর লুপ করতে পারেন এবং যদি বর্তমান অবজেক্টটি আপনি মুছে ফেলতে চান তার সাথে মেলে না, এটি একটি নতুন অ্যারেতে রাখুন।


1

ব্যবহার করুন:

array.splice(2, 1);

এটি সূচি 2 (3 য় আইটেম) থেকে শুরু করে অ্যারে থেকে একটি আইটেম সরিয়ে ফেলবে


1
আসলে এটি অ্যারে থেকে দ্বিতীয় আইটেমটি সরিয়ে ফেলবে, সূচকটি শূন্য থেকে শুরু হয়। এই বিবৃতিতে অস্পষ্টতা রয়েছে, আরও সাধারণ উদাহরণ হতে পারে array.splice(2,1)যা সূচি 2 এ 1 আইটেমটিকে অ্যারে থেকে সরিয়ে দেয়। পরীক্ষা https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice আরো বিস্তারিত জানার জন্য
imdzeeshan

1
const changedArray = array.filter( function(value) {
  return value !== 'B'
});

অথবা আপনি ব্যবহার করতে পারেন:

const changedArray = array.filter( (value) => value === 'B');

পরিবর্তিতআর্রে বিনা মান 'বি' থাকবে


0

অ্যারে.স্প্লাইস ব্যবহার করুন

/*array.splice(index , howMany[, element1[, ...[, elementN]]])

array.splice(index) // SpiderMonkey/Firefox extension*/

array.splice(1,1)

সূত্র: https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / অ্যারে / স্প্লাইস


মধ্যে কমা arrayএবং spliceএকটি বিন্দু হতে হবে।
রব ডাব্লু

সংশোধন করার চেষ্টা করা হয়েছে তবে এসও এর নীতিমালায় বলা হয়েছে যে সম্পাদনাগুলি অবশ্যই 6 টি অক্ষর বা তার বেশি হতে হবে: /
ben_nuttall
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.