জাভাস্ক্রিপ্টের একটি অ্যারে থেকে উপাদানটি কীভাবে সরাবেন?


340
var arr = [1,2,3,5,6];

প্রথম উপাদানটি সরান

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

var arr = [2,3,5,6];

দ্বিতীয় উপাদানটি সরান

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

var arr = [1,3,5,6];

1
slice(start, end)না 'how_many_to_remove'
seanjacob

2
@ পেড অরুনশিফ্ট () সরান না, তবে "অ্যারের শুরুতে এক বা একাধিক উপাদান যুক্ত করে"
psycho brm

@seanjacob এটা হচ্ছে spliceনা sliceআমি অনুমান।
অনিমেষ সিং

উত্তর:


346

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

var indexToRemove = 0;
var numberToRemove = 1;

arr.splice(indexToRemove, numberToRemove);

12
এবং অনুসরণ অন প্রশ্ন: arr.splice(1,1)দ্বিতীয় উপাদান জন্য।
slebetman

1
আমি splice()বেশি পছন্দ করি shift()কারণ এটি আরও নমনীয়। আমি ভবিষ্যতে অন্যরকম কিছু করতে চাই এবং আমি কেবল একটি উপাদান বা এমনকি প্রথম উপাদানটিকে সরাতে চাই না।
গ্যাব্রিয়েল ম্যাকএডামস

14
আপনি যদি গুগল থেকে এখানে আসেন: গ্যাব্রিয়েল এই উত্তরটি পছন্দ করেন তবে আপনার সচেতন হওয়া উচিত শিফটও রয়েছে (), জোসেফের উত্তর দেখুন।
শেরনান্দেজ

668

shift()আপনার পরিস্থিতির জন্য আদর্শ। shift()একটি অ্যারের থেকে প্রথম উপাদানটি সরিয়ে দেয় এবং সেই উপাদানটি ফেরত দেয়। এই পদ্ধতিটি অ্যারের দৈর্ঘ্য পরিবর্তন করে।

array = [1, 2, 3, 4, 5];

array.shift(); // 1

array // [2, 3, 4, 5]

এটি কাজ করে তবে অ্যারেতে প্রথম উপাদানটি সরিয়ে ফেলবে।
গ্যাব্রিয়েল ম্যাকএডামস

53
@ গ্যাব্রিয়েল: ঠিক এটাই ছিল না প্রশ্ন? আমি এটি পছন্দ shift()করি splice(..., ...)যেহেতু এটি অনেক বেশি স্পষ্ট, প্রত্যক্ষ।
ব্রুনো রিস

6
সংশোধন: এটি আপনি সরবরাহ করেছেন এমন লিঙ্ক অনুযায়ী প্রথম উপাদানটি, নতুন অ্যারে মাইনাস প্রথম উপাদানটি প্রদান করে না :)
ড্যানএইচ

কোড উদাহরণটি সঠিক হলেও, বিবরণটি বিভ্রান্তিকর: (ক) @ ড্যানএইচটি নির্দেশ করে যে এটি প্রথম উপাদান যা ফিরে আসে এবং (খ) ইনপুট অ্যারে সংশোধিত হয়েছে তা স্পষ্ট করে বলা হয়নি। অতএব, পেডের উত্তরটি সর্বোত্তম।
mklement0

2
shiftআপনি যদি বৃহত তালিকাগুলি spsp না করেন ততক্ষণে দ্রুততর হয় jsperf.com/splice-vs-shift3 এবং jsperf.com/splice-vs-shift2
কেথোডে

61

Array.prototype.shiftপদ্ধতি একটি অ্যারে থেকে প্রথম উপাদান সরিয়ে ফেলা হবে, এবং এটি ফেরৎ। এটি মূল অ্যারেটি পরিবর্তন করে।

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]

4
জোসেফ সিলভাশির উত্তরের একটি দুর্দান্ত উন্নতি - বর্ণনা এবং কোডের মধ্যে কোনও অসঙ্গতি নেই।
mklement0

48
arr.slice(begin[,end])

ধ্বংসাত্মক নয়, স্প্লাইস এবং শিফটটি আপনার মূল অ্যারে সংশোধন করবে


3
হ্যাঁ পরিবর্তনের জন্য এটি আরও দৃশ্যমান হওয়া উচিত।
ব্যবহারকারীর

16

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

যে কোনও অবস্থান থেকে কোনও উপাদান সরানোর জন্য এখানে ছোট স্নিপেট। এটি জাভাস্ক্রিপ্টে অ্যারে শ্রেণিকে প্রসারিত করে এবং সরান (সূচক) পদ্ধতিটি যুক্ত করে।

// Remove element at the given index
Array.prototype.remove = function(index) {
    this.splice(index, 1);
}

সুতরাং আপনার উদাহরণে প্রথম আইটেমটি সরাতে, কল করুন আরিআরম্রেভ ():

var arr = [1,2,3,5,6];
arr.remove(0);

দ্বিতীয় আইটেমটি সরাতে,

arr.remove(1);

অ্যারে শ্রেণীর জন্য পদ্ধতিগুলি সন্নিবেশ এবং মুছে ফেলার সাথে এখানে একটি ছোট্ট নিবন্ধ

মূলত স্প্লাইস ব্যবহার করে এটি অন্য উত্তরগুলির চেয়ে আলাদা নয়, তবে নামটি spliceস্বজ্ঞাত নয় এবং আপনার অ্যাপ্লিকেশন জুড়ে যদি এই কলটি থাকে তবে এটি কোডটি আরও বেশি শক্ত করে পড়বে।



7

অন্যরা উত্তর মহান, আমি শুধু সঙ্গে একটি বিকল্প সমাধান যোগ করতে চেয়েছিলেন ES6অ্যারে ফাংশন: filter

filter() বিদ্যমান অ্যারে থেকে প্রদত্ত মানদণ্ডের আওতায় থাকা উপাদানগুলির সাথে একটি নতুন অ্যারে তৈরি করে।

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

কিছু উদাহরণ :

প্রথম উপাদানটি সরান :

// Not very useful but it works
function removeFirst(element, index) {
  return index > 0;
}
var arr = [1,2,3,5,6].filter(removeFirst); // [2,3,4,5,6]

দ্বিতীয় উপাদানটি সরান :

function removeSecond(element, index) {
  return index != 1;
}
var arr = [1,2,3,5,6].filter(removeSecond); // [1,3,4,5,6]

বিজোড় উপাদান সরান :

function removeOdd(element, index) {
  return !(element % 2);
}
var arr = [1,2,3,5,6].filter(removeOdd); [2,4,6]

স্টক না থাকা আইটেমগুলি সরান

const inventory = [
  {name: 'Apple', qty: 2},
  {name: 'Banana', qty: 0},
  {name: 'Orange', qty: 5}
];

const res = inventory.find( product => product.qty > 0);


2

আপনি বিশ্রাম অপারেটরের সাথে ES6 ডিস্ট্রাকচারিং অ্যাসাইনমেন্ট বৈশিষ্ট্যটি ব্যবহার করতে পারেন। একটি কমা নির্দেশ করে আপনি কোথায় অ্যারের উপাদানটি এবং মুছে ফেলতে চান বাকি (... আরআর) অপারেটর আপনাকে অ্যারের বাকী উপাদানগুলি দেবে।

const source = [1,2,3,5,6];

function removeFirst(list) {
   var  [, ...arr] = list;
   return arr;
}
const arr = removeFirst(source);
console.log(arr); // [2, 3, 5, 6]
console.log(source); // [1, 2, 3, 5, 6]


1

Array.splice()আকর্ষণীয় সম্পত্তি রয়েছে যা প্রথম উপাদানটিকে অপসারণ করতে কেউ এটি ব্যবহার করতে পারে না। সুতরাং, আমাদের অবলম্বন করা দরকার

function removeAnElement( array, index ) {
    index--;

    if ( index === -1 ) {
        return array.shift();
    } else {
        return array.splice( index, 1 );
    }
}

3
অ্যারে.স্প্লাইস (0,1) প্রথম উপাদানটি সরিয়ে দেয়। এখানে অন্য প্রতিটি উত্তর অনুসারে, এবং বিকাশকারী.মোজিলা.অর্গ.ওএন-ইউএস / ডকস / ওয়েবে / জাভাস্ক্রিপ্ট / রেফারেন্স/… অনুযায়ী । এছাড়াও, কেউ কেন প্রথম উপাদানটি সরানোর জন্য -1 পাস করবে? তারা 0 পাস করবে না?
পাথর

@skypecakes আমি 0th সূচির উপর সংযুক্ত করান বৈধতা সম্পর্কে কথা বলতে পারে না, কিন্তু এখানে সূচক যে চেক সামনে decremented হয় তাই এটি 0 যখন পাস হয়েছে।
জেক টি

হ্যাঁ, এটি অবশ্যই প্রথম উপাদানটিকে সরাতে পারে। আমি এটি এখানে পরীক্ষা করেছি: jsfiddle.net/sijpkes/d87rcLob/2
sjpkes

1

টাইপসক্রিপ্ট সমাধান যা মূল অ্যারেটিকে রূপান্তরিত করে না

function removeElementAtIndex<T>(input: T[], index: number) {
  return input.slice(0, index).concat(input.slice(index + 1));
}

1

অ্যারে থেকে উপাদান সরানোর একাধিক উপায় রয়েছে। আমাকে নীচে সর্বাধিক ব্যবহৃত বিকল্পগুলি চিহ্নিত করতে দিন। আমি এই উত্তরটি লিখছি কারণ এই সমস্ত অপশন থেকে কী ব্যবহার করতে হবে তার সঠিক কারণ আমি খুঁজে পাইনি। প্রশ্নের উত্তর হ'ল বিকল্প 3 ( স্প্লাইস () )।

1) শিফ্ট () - আসল অ্যারে থেকে প্রথম এলিমেন্টটি সরান এবং প্রথম এলিমেন্টটি ফিরুন

অ্যারে.প্রোটোটাইপ.শફ્ટ () এর জন্য রেফারেন্স দেখুন । আপনি যদি প্রথম উপাদানটি সরাতে চান তবে এটি ব্যবহার করুন এবং আপনি যদি মূল অ্যারে পরিবর্তন করে ঠিক থাকেন তবেই

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1);
// expected output: Array [2, 3]

console.log(firstElement);
// expected output: 1

2) স্লাইস () - অ্যারির একটি অনুলিপি ফিরে আসে, একটি সূচনা সূচক এবং শেষ সূচক দ্বারা আলাদা

অ্যারে.প্রোটোটাইপ.স্লাইস () এর জন্য রেফারেন্স দেখুন । আপনি এই বিকল্পটি থেকে একটি নির্দিষ্ট উপাদান সরাতে পারবেন না। আপনি কেবল বিদ্যমান অ্যারে স্লাইস করে নিতে পারেন এবং অ্যারের অবিচ্ছিন্ন অংশ পেতে পারেন। এটি আপনার নির্দিষ্ট সূচকগুলি থেকে অ্যারে কাটার মতো। মূল অ্যারে প্রভাবিত হয় না।

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

3) স্প্লাইস () - নির্দিষ্ট সূচকগুলিতে উপাদানগুলি সরিয়ে বা প্রতিস্থাপনের মাধ্যমে অ্যারের সামগ্রী পরিবর্তন করুন।

অ্যারে.প্রোটোটাইপ.স্প্লাইস () এর জন্য রেফারেন্স দেখুন । স্প্লাইস () পদ্ধতিটি বিদ্যমান উপাদানগুলি সরিয়ে বা প্রতিস্থাপন করে এবং / বা জায়গায় নতুন উপাদান যুক্ত করে একটি অ্যারের সামগ্রী পরিবর্তন করে। আপডেট হওয়া অ্যারে প্রদান করে। আসল অ্যারে আপডেট হয়।

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

0

আপনি হ্রাস সহ এটি করতে পারেন:

let arr = [1, 2, 3]

arr.reduce((xs, x, index) => {
        if (index == 0) {
            return xs
        } else {
            return xs.concat(x)
        }
    }, Array())

// Or if you like a oneliner
arr.reduce((xs, x, index) => index == 0 ? xs : xs.concat(x), Array())
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.