सरणी से अंतिम आइटम निकालें


440

मेरे पास निम्न सरणी है।

var arr = [1,0,2];

मैं अंतिम तत्व यानी 2 को हटाना चाहूंगा।

मैंने इस्तेमाल किया arr.slice(-1);लेकिन यह मूल्य नहीं हटाता है।




3
arr.splice (-1,1) आपको सरणी में लौटाएगा [1,0]; arr.slice (-1,1) आप के लिए वापस आ जाएगा [2]
अंजा ईशमुखमीतोवा

10
arr.slice(0,-1)मेरे लिए सबसे अच्छा समाधान था
ब्लैक मम्बा

3
सवाल थोड़ा अस्पष्ट है क्योंकि "अंतिम तत्व को हटा दें" का अर्थ हो सकता है कि तत्व को सरणी से हटा दें और सरणी को रखें (एक तत्व कम)। लेकिन इसका मतलब तत्व को हटाना और तत्व को रखना भी हो सकता है। पहला मामला:, splice()दूसरा मामला pop():।
thoni56

जवाबों:


517

ब्याह का उपयोग करें (सूचकांक, howmany)

arr.splice(-1,1)

1
@PrithvirajMitra आप 1 और 0 निकालना चाहते हैं? तो सरणी == [2]?
एंटोन

3
एक-तत्व सरणियों के लिए काम नहीं करता है: [1].splice(-1, 1)=>[1]
तवारो

135
यह सबसे अच्छा समाधान नहीं है, बेस्ट पॉप फंक्शन है। यह नहीं।
टॉमीक्स

6
अपने दम पर पॉप केवल अंतिम तत्व का मूल्य लौटाएगा। अगर मैं सही तरीके से समझूं, तो @PrithvirajMitra दो चीजें चाहता है: 1) मूल तत्व से अंतिम तत्व को हटाने के लिए, और 2) उस तत्व को एक एकल तत्व सरणी के रूप में लौटाएं - यानी:, [0,1,2] -> [2]पीछे छोड़ते हुए [0,1]। अगर ऐसा है, तो [arr.pop()]चाल चलिएगा।
बेन हल

11
ध्यान दें कि array.pop()संशोधित होगा array, जबकि slice(0, -1)नहीं होगा। पॉप बेशक तेज है, लेकिन सभी जरूरतों के लिए हमेशा उपयुक्त नहीं हो सकता है।
adelriosantiago

621

जावास्क्रिप्ट सम्मेलन द्वारा Array.prototyp.pop ()

let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]

7
Array.prototyp.pop () सबसे तेज़ jsperf.com/slice-vs-splice-vs-pop/3
डैनियल

1
पॉप () का उपयोग करते समय, सुनिश्चित करें कि jQuery ('# foo') न करें। वैल (नंबर.पॉप ()), जब तक कि आप केवल सरणी के अंतिम आइटम को फ़ील्ड में नहीं रखना चाहते। पॉप () हटाए गए तत्व को वापस करता है। जैसा कि स्टुअर्ट ने किया है, पहले नंबर करें। पॉप (); और फिर jQuery ('# foo') करते हैं। वैल (संख्या) ...
चार्ल्स रॉबर्टसन

4
सर्वश्रेष्ठ समाधान +1
mdlars

2
यह unpop () है कि सरणी के बाकी देता है शांत होगा।
एरोमॉफ

2
सरणी को अपरिवर्तनीय रखते हुए ऐसा करने का कोई तरीका?
nayiaw

263

आप इस .slice()पद्धति का उपयोग करके ऐसा कर सकते हैं :

arr.slice(0, -1);    // returns [1,0]

यहाँ एक डेमो है:

var arr = [1, 0, 2];
var newArr = arr.slice(0, -1);    // returns [1,0]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(0, -1): </b>
<div id="div2"></div>

करने के बजाय:

arr.slice(-1);   // returns [2]

यहाँ एक डेमो है:

var arr = [1, 0, 2];
var newArr = arr.slice(-1);    // returns [2]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(-1): </b>
<div id="div2"></div>

स्पष्टीकरण: -

अब Array.prototype.slice()या लघु slice()विधि में मूल सिंटैक्स है:

arr.slice([begin[, end]])

यहाँ,

beginपैरामीटर जो एक सरणी शुरू होता है से निकासी पर शून्य आधारित सूचकांक है। तो, अगर हम कुछ ऐसा करते हैं तो उपरोक्त उदाहरण के आधार पर कहते हैं

arr.slice(0)    // returns [1,0,2]

यह स्थिति 0 से अनुक्रम की शुरुआत से सभी सरणी तत्वों को लौटाएगा और वह है [1,0,2]। इसी तरह, अगर हम करते हैं

arr.slice(1)    // returns [0,2]

यह [0,2]0 के बाद से यहाँ स्थिति 1 पर है और उसके बाद सब कुछ होगा। अब, आपके मामले में आपने एक नकारात्मक सूचकांक पास किया है, -1जैसे कि शुरुआती पैरामीटर, जो अनुक्रम के अंत से एक ऑफसेट इंगित करता है। तो, slice(-1)आपके मामले में अनुक्रम में अंतिम एक सरणी तत्व निकालता है और वह है 2( जैसा कि हमने पहले ही उपरोक्त डेमो में देखा है )।

अब, यहां विधि सिंटैक्स endमें पैरामीटर के बारे में बात करते slice()हैं। यह फिर से एक शून्य-आधारित सूचकांक है जिस पर एक सरणी से निष्कर्षण समाप्त होता है। तो, हम कहते हैं कि हमारे पास एक सरणी है: -

var arr = [1, 0, 2, 5, 3, 9];

और हम 2,5,3सरणी में बस तत्वों को प्राप्त करना चाहते हैं । अब, 2अनुक्रम की शुरुआत से स्थिति है 2और अंतिम तत्व के लिए 3यह है 4। हमें यहां 5 से निकासी निकालने की आवश्यकता होगी, क्योंकि हमें उस स्थिति से पहले तत्व प्राप्त करने की आवश्यकता है। इसलिए, हम बस slice()यहाँ की तरह विधि लागू करेंगे

arr.slice(2, 5)    // returns [2,5,3]

आपके मामले में, हमने -1अंतिम पैरामीटर के रूप में लागू किया है, इसलिए हमारा कोड पसंद है

arr.slice(0, -1)   // returns [1,0]

एक नकारात्मक सूचकांक के रूप endमें, अनुक्रम के अंत से एक ऑफसेट इंगित करता है। तो, slice(0,-1)अनुक्रम में दूसरे-से-अंतिम तत्व के माध्यम से पहला तत्व निकालता है। तो, हम वांछित आउटपुट प्राप्त करते हैं। हम भी कर सकते हैं पसंद

arr.slice(0, 2)    // returns [1,0]

हमें वही आउटपुट मिलेगा। लेकिन, मैंने -1यहां लंबे अरसे के लिए भी इसे लागू करना आसान बना दिया है

[0,2,3,1,2,9,3,6,3,9,1,0,2,9,0,1,1,2,3,4,7,9,1]

यदि आप अंतिम तत्व को निकालना चाहते हैं, तो आप यहाँ पिछले 9 की स्थिति को बैठना और गणना नहीं करना चाहते हैं arr.slice(0, 22)। फिर आप केवल यहाँ नकारात्मक सूचकांक तर्क को लागू कर सकते हैं

arr.slice(0, -1) // same result as arr.slice(0, 22)

आशा है ये मदद करेगा!


11
यह बहुत अच्छा काम करता है, बस यह सुनिश्चित करें कि आप यह नोटिस करते हैं कि यह .slice () और नहीं .s p जूँ () है।
ब्रायन हेडन

4
यह ध्यान दिया जाना चाहिए कि यह समाधान सरणी से अंतिम आइटम को नहीं हटाता है , arrबल्कि एक नया सरणी देता है जो उस अंतिम आइटम को बाहर करता है। जैसा कि मोज़िला के डॉक्स कहते हैं: "टुकड़ा () विधि एक सरणी के एक हिस्से की उथली प्रतिलिपि को एक नई सरणी ऑब्जेक्ट में लौटाती है।"
F Lekschas

4
प्रश्न का नमूना कोड स्पष्ट रूप से पूछता है कि मूल सरणी से हटाए गए अंतिम मान के साथ एक नया सरणी कैसे प्राप्त करें। तो arr.slice(0, -1)सबसे अच्छा जवाब है।
सुनाओन

4
स्लाइस बेहतर है क्योंकि यह मूल सरणी को संशोधित नहीं करता है
user365314

66

उदाहरण से सीखें:

let array_1 = [1,2,3,4];
let array_2 = [1,2,3,4];
let array_3 = [1,2,3,4];

array_1.splice(-1,1)  // output --> [4]      array_1 = [1,2,3]
array_2.slice(0,-1);  // output --> [1,2,3]  array_2 = [1,2,3,4]
array_3.pop();        // output --> 4        array_3 = [1,2,3]

13
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह दिखाता है कि सबसे अधिक गलत क्या है। > मनचाहा ऐरर लौटना या ऐरे को मनचाहे तरीके से म्यूट करना।
राइजिंगएजेंट

1
@RaisingAgent इन बातों को नोटिस करने के लिए धन्यवाद :)
लुकास लाइज़िस

43

आपको ऐसा करने की आवश्यकता होगी क्योंकि sliceमूल सरणी में परिवर्तन नहीं होता है।

arr = arr.slice(-1);

यदि आप मूल सरणी को बदलना चाहते हैं, जिसका आप उपयोग कर सकते हैं splice:

arr.splice(-1, 1);

या pop:

arr.pop();

22

मैं विचार करूंगा .pop() सबसे 'सही' समाधान मानूंगा, हालांकि, कभी-कभी यह काम नहीं कर सकता है क्योंकि आपको अंतिम तत्व के बिना सरणी का उपयोग करने की आवश्यकता है ...

ऐसे मामले में आप निम्नलिखित का उपयोग करना चाह सकते हैं, यह वापस आ जाएगा [1,2,3]

var arr = [1,2,3,4];
console.log(arr.splice(0,arr.length-1));

जबकि .pop()लौटेगा 4:

var arr = [1,2,3,4];
console.log(arr.pop());

जो वांछनीय नहीं हो सकता है ...

आशा है कि यह आपको कुछ समय बचाता है।


1
धन्यवाद दोस्त, यह सटीक उदाहरण है जिसे मुझे उपयोग करने की आवश्यकता है। मैं उसकी सराहना करता हूं :)
बैरी माइकल डॉयल

2
यह सबसे सही उत्तर है। इसकी शर्म की बात है कि अन्य लोगों को उच्च स्थान मिला है।
mmla


12

आप बस का उपयोग कर सकते हैं, arr.pop()

यह एरे की अंतिम प्रविष्टि को हटा देता है।

var arr = [1,0,2]; 
var popped = arr.pop();//Now arr = [1,0] & popped = 2

8

बस अपने उपयोग के मामले के लिए निम्नलिखित का उपयोग करें:

var arr = [1,2,3,4];
arr.pop() //returns 4 as the value
arr // value 4 is removed from the **arr** array variable

सिर्फ एक नोट। जब आप pop()फ़ंक्शन निष्पादित करते हैं, भले ही लाइन पॉपप्ड आइटम लौटाती है तो मूल सरणी प्रभावित होती है और पॉप्डेड तत्व हटा दिया जाता है।


7

आप इसे दो तरीकों से कर सकते हैं splice():

  1. arr.splice(-1,1)
  2. arr.splice(arr.length-1,1)

splice(position_to_start_deleting, how_many_data_to_delete) दो पैरामीटर लेता है।

position_to_start_deleting: शून्य आधारित सूचकांक जहां से हटाना शुरू करना है। how_many_data_to_delete: संकेतित सूचकांक से, कितने लगातार डेटा हटाए जाने चाहिए।

आप अंतिम तत्व को किसी सरणी से अंतिम तत्व को हटाने के pop()रूप में उपयोग करके भी निकाल सकते हैं pop()
उपयोगarr.pop()


6

arr.slice(-1)सरणी के अंतिम तत्व की एक प्रति लौटाएगा , लेकिन मूल सरणी को असम्बद्ध छोड़ देता है।

nकिसी सरणी से अंतिम तत्वों को निकालने के लिए , का उपयोग करेंarr.splice(-n) "स्प्लिस" में "पी" पर ध्यान दें)। रिटर्न वैल्यू एक नया एरे होगा जिसमें हटाए गए तत्व होंगे।

सरल, अभी तक n == 1, उपयोग के लिएval = arr.pop()


5
var arr = [1,0,2];
arr.length--; 

// अंतिम तत्व को हटाता है // अगर जाँच करने की आवश्यकता है


5

किसी सरणी के अंतिम तत्व को हटाने और संग्रहीत करने के लिए यह विधि अधिक सहायक है।

var sampleArray = [1,2,3,4];// Declaring the array
var lastElement = sampleArray.pop();//this command will remove the last element of `sampleArray` and stores in a variable called `lastElement` so that you can use it if required.

अब परिणाम हैं:

console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4

यह कैसे अलग है कि यह जवाब ?
मप्रस्कोव

हां यह सच है लेकिन यह अधिक विस्तृत है। आपका उत्तर एक शुरुआत के लिए समझना मुश्किल है।
रज़ात नाइक

4

यह ध्यान देने योग्य है कि sliceदोनों एक वापस आ जाएगी नई सरणी, जबकि .pop()और .splice()उत्परिवर्तित जाएगा मौजूदा सरणी।

यदि आप एक जंजीर कमांड शैली के साथ डेटा के संग्रह को संभालना पसंद करते हैं, तो आप वास्तव में साथ रहना चाहेंगे slice इस तरह से कुछ के चाहेंगे।

उदाहरण के लिए:

myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the last item
  .map(x => `The number is: ${x}`);// map to a set of strings

इसके बारे में "पॉप" के साथ एक ही तरह का काम करने के लिए, और चर प्रबंधन के बारे में बहुत अधिक गड़बड़ करने की आवश्यकता हो सकती है, इसके विपरीत map,filter , आदि, आप एक नई सरणी वापस नहीं मिलता है।

यह उसी तरह की चीज है push, जो किसी आइटम को किसी सरणी के अंत में जोड़ता है। आप इससे बेहतर हो सकते हैं concatक्योंकि इससे आप प्रवाह को बनाए रख सकते हैं।

myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the "10"
  .concat([100])                   // note with concat, you must pass an array
  .map(x => `The number is: ${x}`) // map to a set of strings
  


3

ब्याह (सूचकांक, howmany) - यह समाधान अच्छा लगता है। लेकिन यह howmany केवल पॉजिटिव एरे इंडेक्स के लिए काम करेगा। पिछले दो वस्तुओं या तीन वस्तुओं को हटाने के लिए सूचकांक का ही उपयोग करें।

उदाहरण के लिए, अंतिम दो वस्तुओं को हटाने के लिए ब्याह (-2)। अंतिम तीन वस्तुओं को हटाने के लिए ब्याह (-3)।



3
var a = [1,2,3,4,5,6]; 
console.log(a.reverse().slice(1).reverse());
//Array(5) [ 1, 2, 3, 4, 5 ]

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करता है और यह समस्या को हल करता है ताकि उत्तर के दीर्घकालिक मूल्य में सुधार हो सके।
Vasilisa

3

2019 ECMA5 समाधान:

const new_arr = arr.reduce((d, i, idx, l) => idx < l.length - 1 ? [...d, i] : d, [])

गैर-विनाशकारी, सामान्य, एक-लाइनर और केवल आपके सरणी के अंत में एक कॉपी और पेस्ट की आवश्यकता होती है।


1
Doesn't नॉन डिस्ट्रक्टिव ’ध्वनि नहीं करता है जैसे मूल प्रश्न क्या चाहता है I would like to remove the last element :। मूल सरणी पर एक विनाशकारी / उत्परिवर्तन ऑपरेशन की आवश्यकता है।
बेन हल


1

यह अंतिम आइटम निकालने का अच्छा तरीका है:

if (arr != null && arr != undefined && arr.length > 0) {
      arr.splice(arr.length - 1, 1);
}

निम्नलिखित के रूप में ब्याह का विवरण:

ब्याह (स्टार्टइंडेक्स, ब्याह की संख्या)


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

stack.reverse().shift();

stack.push(0);

आउटपुट होगा: ऐरे [0,1,2,3,4,5] । इससे आप एक ही मान रखने वाले तत्वों को उतनी ही मात्रा में रख पाएंगे, जितना कि आप एक नए मूल्य को धक्का देते हैं।


आपको अपनी शिफ्ट के बाद या फिर सही ऑर्डर प्राप्त करने के लिए अपने पुश के बाद एक और रिवर्स की आवश्यकता है
साइबर

रिवर्स मूल सरणी को उलट देता है। मुझे पकड़ लिया है ... एक या दो बार कहने देता है ...
साइमन_वेअर

1

सूचकांक के आधार पर फ़िल्टर करने के लिए एक और तरीका है:

arr.filter((element, index) => index < arr.length - 1);

नोट: filter()नया सरणी बनाता है, मौजूदा एक को नहीं बदलता है।


0

यदि आप जावास्क्रिप्ट में सरणी के अंत से n आइटम निकालना चाहते हैं, तो आप आसानी से उपयोग कर सकते हैं:

arr.splice(-n, n);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.