ฉันมี:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
ฉันต้องการที่จะทำสิ่งที่ชอบ:
array.remove("B");
แต่ไม่มีฟังก์ชั่นลบ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมี:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
ฉันต้องการที่จะทำสิ่งที่ชอบ:
array.remove("B");
แต่ไม่มีฟังก์ชั่นลบ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ฉันกำลังปรับปรุงเธรดนี้ด้วยโซลูชัน 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']
วน.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);
}
0
ไม่เร็วขึ้นโดยอัตโนมัติเหมือนกับที่อยู่ในนั้นพูดตราบใดที่คุณแคชขีด จำกัด ซึ่งจะทำให้สิ่งต่าง ๆ ซับซ้อนหากคุณทำตามนัดแรกต่อไป (แต่ไม่ใช่ถ้าคุณหยุดมัน)
รายชื่อหนึ่งสมุทร
ลองแก้ปัญหานี้สำหรับอาร์เรย์นี้:
var array = ['A', 'B', 'C'];
1. ลบเฉพาะรายการแรก: ใช้หากคุณแน่ใจว่ามีรายการอยู่
array.splice(array.indexOf('B'), 1);
2. นำออกล่าสุดเท่านั้น: ใช้หากคุณแน่ใจว่ามีรายการอยู่
array.splice(array.lastIndexOf('B'), 1);
3. ลบเหตุการณ์ทั้งหมด:
array = array.filter(v => v !== 'B');
คุณต้องค้นหาตำแหน่งของสิ่งที่คุณต้องการ.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);
สิ่งนี้จะดูแลทุกเหตุการณ์
Uncaught ReferenceError: array is not defined
ผมเคยได้รับข้อผิดพลาดต่อไปนี้: เกิดอะไรขึ้น?
.indexOf()
เพียงเล็กน้อย หากคุณผ่านfound
เป็นอาร์กิวเมนต์ที่สองในการ.indexOf()
โทรภายใน while-loopองค์ประกอบในอาร์เรย์ที่ถูกตรวจสอบแล้วและสิ้นสุดลงไม่เท่ากันจะไม่ถูกตรวจสอบอีกครั้ง: found = arr.indexOf(what, found);
ง่ายดาย
array.splice(array.indexOf(item), 1);
-1
หากไม่พบสิ่งใดและใครเลยรอยต่อจะลบ 1 องค์ประกอบจากปลายอาร์เรย์
ทางออกที่ง่าย (ES6)
หากคุณไม่มีองค์ประกอบที่ซ้ำกัน
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
คุณต้องเขียนว่าคุณเป็นเจ้าของลบ คุณสามารถวนซ้ำแถวลำดับคว้าดัชนีของรายการที่คุณต้องการลบและใช้splice
เพื่อลบออก
อีกวิธีหนึ่งคุณสามารถสร้างอาร์เรย์ใหม่วนซ้ำอาร์เรย์ปัจจุบันและถ้าวัตถุปัจจุบันไม่ตรงกับสิ่งที่คุณต้องการเอาออกให้ใส่มันในอาร์เรย์ใหม่
ใช้:
array.splice(2, 1);
สิ่งนี้จะลบหนึ่งรายการจากอาร์เรย์เริ่มต้นที่ดัชนี 2 (รายการที่ 3)
array.splice(2,1)
จะลบ 1 รายการที่ดัชนี 2 จากอาร์เรย์ ตรวจสอบhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/spliceสำหรับรายละเอียดเพิ่มเติม
const changedArray = array.filter( function(value) {
return value !== 'B'
});
หรือคุณสามารถใช้:
const changedArray = array.filter( (value) => value === 'B');
อาร์เรย์ที่เปลี่ยนไปจะมีค่าที่ไม่มี 'B'
ใช้ array.splice
/*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/Reference/Global_Objects/Array/splice
array
และsplice
จะต้องมีจุด
.indexOf()
และ.splice()
ควรทำเคล็ดลับ หรืออีกวิธีหนึ่ง,.filter()
.