2012-08-07 19 views
6

का उपयोग करके सरणी से तत्व निकालें, मैं स्लाइस का उपयोग करके अपने सरणी से एक तत्व को निकालने का प्रयास कर रहा हूं, लेकिन मैं इसे काम नहीं कर सकता, कोड के इस टुकड़े को देखें।टुकड़ा

console.log(this.activeEffects); // Prints my array 
    console.log(this.activeEffects.slice(0,1)); // Remove from index 0, and remove one. 
    console.log(this.activeEffects); // Prints array again, this time my element should be gone 

इसका परिणाम है।

enter image description here

तो क्या इस से, है पहली सरणी पूरी है पर, के रूप में यह होना चाहिए प्राप्त है। फिर इसके प्रिंट्स सरणी का कटा हुआ क्या है। अंत में तीसरा खाली होना चाहिए? या?

+1

इसके लिए jsfiddle बनाना संभव है? –

+0

क्या आप वाकई यह एक सरणी है? –

उत्तर

12

मेरा मानना ​​है कि आप splice के लिए देख रहे हैं। W3 Schools:

splice() विधि किसी सरणी में/से आइटम को जोड़/हटाती है, और हटाए गए आइटम को वापस लौटाती है।

उस पृष्ठ पर उदाहरण देखें; उपयोग के मामले में आप जो हासिल करना चाहते हैं उसके समान है।

संपादित करें: Alternative link to MDN, जैसा कि निकोसुनशाइन द्वारा सुझाया गया है; वहां कमांड के बारे में अधिक जानकारी।

+13

मुझे पता है कि मैं परेशान लग सकता हूं, लेकिन डब्ल्यू 3 स्कूलों का उपयोग न करें। एमडीएन यह एक बेहतर संसाधन है https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice – NicoSantangelo

+0

धन्यवाद टीएसएल, इसने मेरी समस्या हल की। अभी अपने स्वयं को slapping। W0schools लिंक के ऑटो-ब्लॉक का अनुरोध करने के लिए – MartinElvar

+0

@nicosunshine मेटा! – canon

5

.slice सरणी उत्परिवर्तित नहीं है, आप .splice() इस्तेमाल कर सकते हैं सरणी में सूचकांक i पर आइटम को हटाने के लिए:

this.activeEffects.splice(i, 1) 
+0

लेकिन मुझे सरणी – MartinElvar

+0

@MartinElvarJensen दाईं ओर एक तत्व को हटाने की आवश्यकता हो सकती है, मुझे इसका एहसास नहीं हुआ। जब आप शुरुआत से हटाना चाहते हैं तो 'shift()' बेहतर होता है। – Esailija

+0

स्लाइस मूल सरणी को नहीं बदलता है जैसा कि वह कहता है लेकिन यह हटाए गए तत्वों को वापस करता है। फिर मूल सरणी को हटाए गए तत्वों के साथ असाइनमेंट करके प्रतिस्थापित क्यों नहीं करें? जैसे this.activeEffects = this.activeEffects.slice (0,1) – Magrangs

1

Array.prototype. slice() ...

मूल सरणी में परिवर्तन नहीं करता है, लेकिन एक नया "एक स्तर गहरी" कॉपी है कि तत्वों मूल सरणी से कटा हुआ की प्रतियां शामिल हैं देता है। इस प्रकार मूल सरणी के तत्वों नए सरणी में कॉपी कर रहे हैं:

Array.prototype. splice() जबकि ...

परिवर्तन एक सरणी की सामग्री, नए तत्वों को जोड़ने के दौरान वर्ष तत्वों को हटाने के।

इस उदाहरण में अंतर को स्पष्ट करना चाहिए।

// sample array 
 
var list = ["a","b","c","d"]; 
 
// slice returns a new array 
 
console.log("copied items: %o", list.slice(2)); 
 
// but leaves list itself unchanged 
 
console.log("list: %o", list); 
 
// splice modifies the array and returns a list of the removed items 
 
console.log("removed items: %o", list.splice(2)); 
 
// list has changed 
 
console.log("list: %o", list);

-1

यहाँ पर देखो: http://www.w3schools.com/jsref/jsref_slice_array.asp

आप देख सकते हैं कि टुकड़ा विधि का चयन वस्तु एट उन्हें एक नई सरणी वस्तु ^^ में फेंक तो तुम एक वस्तु को नहीं हटा सकते इस तरह, हो सकता है कि आप इस तरह की चीज़ों को आजमा सकें:

var a = ["a","b","c"]; (pseudo code) 
/* I wan't to remove the "b" object */ 

var result = a.slice(0,1)+a.slice(2,1); /* If you considers that "+" is a concatenation operator, i don't remember if it is true... */ 
3

यही वह है जो मैं आने में सक्षम था साथ:

var newArray = oldArray.slice(indexOfElementToRemove+1).concat(oldArray.slice(0,indexOfElementToRemove)); 
1
function removeItemWithSlice(index) { 
    return [...items.slice(0, index), ...items.slice(index + 1)] 
} 

स्लाइस एक नई सरणी का निर्माण करेगा।हम दो सरणी बनाते हैं: भिखारी से सूचकांक तक और सूचकांक + 1 से अंत तक। फिर हम उन सरणी के सामान लेने के लिए स्प्रेड ऑपरेटर (...) लागू करते हैं और एक नई एकल सरणी बनाते हैं जिसमें हम सभी वस्तुओं की देखभाल करते हैं। यदि आपको एक लाइनर पसंद नहीं है तो मैं समकक्ष तरीके से पेस्ट करूंगा:

function removeItemWithSlice(index) { 
    const firstArr = items.slice(0, index); 
    const secondArr = items.slice(index + 1); 
    return [...firstArr , ...secondArr] 
} 
संबंधित मुद्दे