ฉันมีอาร์เรย์ที่มีลักษณะเช่นนี้: var y = [1, 2, 3];
ผมอยากจะเอาจากแถว2
y
ฉันจะลบค่าเฉพาะออกจากอาร์เรย์โดยใช้ jQuery ได้อย่างไร ฉันได้ลองแล้วpop()
แต่นั่นจะลบองค์ประกอบสุดท้ายเสมอ
ฉันมีอาร์เรย์ที่มีลักษณะเช่นนี้: var y = [1, 2, 3];
ผมอยากจะเอาจากแถว2
y
ฉันจะลบค่าเฉพาะออกจากอาร์เรย์โดยใช้ jQuery ได้อย่างไร ฉันได้ลองแล้วpop()
แต่นั่นจะลบองค์ประกอบสุดท้ายเสมอ
คำตอบ:
ทำงานJSFIDDLE
คุณสามารถทำสิ่งนี้:
var y = [1, 2, 2, 3, 2]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
ผลลัพธ์:
[1, 3]
http://snipplr.com/view/14381/remove-item-from-array-with-jquery/
ด้วย jQuery คุณสามารถดำเนินการแบบบรรทัดเดียวดังนี้
ตัวอย่าง: http://jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
ใช้พื้นเมือง.splice()
และของ $.inArray()
jQuery
while
วนซ้ำและตัวแปรชั่วคราวเช่นนี้:var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
jQuery.filter
วิธีการนี้มีประโยชน์ สิ่งนี้มีให้สำหรับArray
วัตถุ
var arr = [1, 2, 3, 4, 5, 5];
var result = arr.filter(function(elem){
return elem != 5;
});//result -> [1,2,3,4]
http://jsfiddle.net/emrefatih47/ar0dhvhw/
ใน Ecmascript 6:
let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
คุณสามารถใช้underscore.js underscore.jsมันทำให้สิ่งต่าง ๆ ง่ายขึ้น
ในกรณีของคุณรหัสทั้งหมดที่คุณจะต้องเขียนคือ -
_.without([1,2,3], 2);
และผลลัพธ์จะเป็น [1,3]
มันลดรหัสที่คุณเขียน
ไม่ใช่วิธี jQuery แต่ ... ทำไมไม่ใช้วิธีที่ง่ายกว่า ลบ 'c' ออกจากอาร์เรย์ต่อไปนี้
var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]
คุณยังสามารถใช้: (หมายเหตุถึงตัวเอง: อย่าแก้ไขวัตถุที่คุณไม่ได้เป็นเจ้าของ )
Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = ['a','b','c'];
a.remove('c'); //value of "a" is now ['a','b']
การเพิ่มนั้นง่ายกว่าa.push('c')
ลบรายการในอาร์เรย์
var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
//This prototype function allows you to remove even array from array
Array.prototype.remove = function(x) {
var i;
for(i in this){
if(this[i].toString() == x.toString()){
this.splice(i,1)
}
}
}
ตัวอย่างการใช้งาน
var arr = [1,2,[1,1], 'abc'];
arr.remove([1,1]);
console.log(arr) //[1, 2, 'abc']
var arr = [1,2,[1,1], 'abc'];
arr.remove(1);
console.log(arr) //[2, [1,1], 'abc']
var arr = [1,2,[1,1], 'abc'];
arr.remove('abc');
console.log(arr) //[1, 2, [1,1]]
ในการใช้ฟังก์ชั่นต้นแบบนี้คุณจะต้องวางลงในโค้ดของคุณ จากนั้นคุณสามารถนำไปใช้กับอาร์เรย์ใด ๆ ด้วย 'เครื่องหมายจุด':
someArr.remove('elem1')
i
ถูกเขียนทับ
ไม่มีวิธีดั้งเดิมในการทำเช่นนี้ใน Javascript คุณสามารถใช้ไลบรารีหรือเขียนฟังก์ชันขนาดเล็กเพื่อทำสิ่งนี้แทน: http://ejohn.org/blog/javascript-array-remove/
คุณสามารถใช้. not ฟังก์ชั่นเช่นนี้:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
searchValue
เป็น 4 รันโค้ดไม่พบปัญหา ค่าทั้งหมดยังคงปรากฏอยู่ @ JulianK
คำตอบของ user113716 รุ่นของฉัน เขาลบค่าหากไม่พบการแข่งขันซึ่งไม่ดี
var y = [1, 2, 3]
var removeItem = 2;
var i = $.inArray(removeItem,y)
if (i >= 0){
y.splice(i, 1);
}
alert(y);
ตอนนี้จะลบ 1 รายการหากพบการแข่งขัน 0 ถ้าไม่พบการแข่งขัน
มันทำงานอย่างไร:
value
ในarray
count
จำนวนของค่าเริ่มต้นที่index
เพื่อให้เราเพียงแค่ต้องการcount
ของ1
//in case somebody needs something like this: multidimensional array (two items)
var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']];
var removeItem = 3;
ar = jQuery.grep(ar, function(n) {
return n[0] != removeItem; //or n[1] for second item in two item array
});
ar;
มีวิธีง่ายๆในการต่อรอย ตามไวยากรณ์การประกบกันของW3Schoolมีดังต่อไปนี้
array.splice(index, howmany, item1, ....., itemX)
ดัชนีที่ ต้องการ จำนวนเต็มที่ระบุตำแหน่งที่จะเพิ่ม / ลบรายการใช้ค่าลบเพื่อระบุตำแหน่งจากจุดสิ้นสุดของอาร์เรย์
เท่าไหร่จำเป็นต้องใช้ จำนวนรายการที่จะลบ หากตั้งค่าเป็น 0 จะไม่มีการลบรายการใด ๆ
item1, ... , itemX เป็น ตัวเลือก รายการใหม่ที่จะเพิ่มลงในอาร์เรย์
โปรดทราบว่า js ต่อไปนี้จะปรากฏรายการที่ตรงกันอย่างน้อยหนึ่งรายการจากอาร์เรย์ที่กำหนดหากพบมิฉะนั้นจะไม่ลบรายการสุดท้ายของอาร์เรย์
var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
return elem == item;
}).length;
หรือ
var itemsFound = $.grep(x, function (elem) {
return elem == item;
}).length;
ดังนั้นสุดท้ายควรมีลักษณะดังนี้
x.splice( startItemIndex , itemsFound );
หวังว่านี่จะช่วยได้
ขั้นแรกตรวจสอบว่ามีองค์ประกอบอยู่ในอาร์เรย์หรือไม่
$.inArray(id, releaseArray) > -1
บรรทัดข้างต้นส่งคืนดัชนีขององค์ประกอบนั้นหากมีอยู่ในอาร์เรย์มิฉะนั้นจะส่งคืน -1
releaseArray.splice($.inArray(id, releaseArray), 1);
ตอนนี้บรรทัดด้านบนจะลบองค์ประกอบนี้ออกจากอาร์เรย์หากพบ เพื่อสรุปตรรกะด้านล่างเป็นรหัสที่จำเป็นในการตรวจสอบและลบองค์ประกอบจากอาร์เรย์
if ($.inArray(id, releaseArray) > -1) {
releaseArray.splice($.inArray(id, releaseArray), 1);
}
else {
releaseArray.push(id);
}
ฉันมีงานที่คล้ายกันซึ่งฉันต้องการลบวัตถุหลายรายการพร้อมกันโดยยึดตามคุณสมบัติของวัตถุในอาร์เรย์
ดังนั้นหลังจากการทำซ้ำสองสามครั้งฉันก็จบลงด้วย:
list = $.grep(list, function (o) { return !o.IsDeleted });
ฉันจะขยายคลาส Array ด้วยpick_and_remove()
ฟังก์ชันดังนี้:
var ArrayInstanceExtensions = {
pick_and_remove: function(index){
var picked_element = this[index];
this.splice(index,1);
return picked_element;
}
};
$.extend(Array.prototype, ArrayInstanceExtensions);
ในขณะที่มันอาจดูเหมือน verbose เล็กน้อยคุณสามารถโทร pick_and_remove()
อาเรย์ที่คุณต้องการได้!
การใช้งาน:
array = [4,5,6] //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array; //=> [4,6]
คุณสามารถดูทั้งหมดนี้ในการกระทำชุดรูปแบบโปเกมอนที่นี่
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
var difference = [];
for( var i = 0; i < array1.length; i++ ) {
if( $.inArray( array1[i], array2 ) == -1 ) {
difference.push(array1[i]);
}
}
return difference;
}
จากนั้นคุณสามารถเรียกใช้ฟังก์ชันใดก็ได้ในรหัสของคุณ
var I_like = ["love", "sex", "food"];
var she_likes = ["love", "food"];
alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"!
สามารถใช้งานได้ในทุกกรณีและหลีกเลี่ยงปัญหาในวิธีการข้างต้น หวังว่าจะช่วย!
ลองสิ่งนี้มันใช้งานได้สำหรับฉัน
_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
`enter code here`},
คำตอบที่ได้รับการโหวตมากที่สุดอันดับที่สองอยู่ที่การติดตามที่ใกล้เคียงที่สุดที่เป็นไปได้กับวิธีการหนึ่งเดียวของ jQuery ของพฤติกรรมที่ตั้งใจไว้ที่ OP ต้องการ แต่พวกเขาสะดุดในตอนท้ายของรหัสและมีข้อบกพร่อง หากรายการของคุณที่จะลบไม่ได้อยู่ในอาร์เรย์รายการสุดท้ายจะถูกลบออก
มีบางคนที่สังเกตเห็นปัญหานี้และบางคนเสนอวิธีที่จะวนซ้ำเพื่อป้องกันปัญหานี้ ฉันเสนอวิธีที่สั้นที่สุดและสะอาดที่สุดที่ฉันสามารถหาได้และฉันได้แสดงความคิดเห็นภายใต้คำตอบของพวกเขาสำหรับวิธีแก้ไขรหัสตามวิธีนี้
var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";
// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used
// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array
// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);
array xจะลบองค์ประกอบ "bye" อย่างง่ายดายและ array yจะไม่ถูกแตะต้อง
การใช้อาร์กิวเมนต์$.inArray(removeItem,array)
เป็นอาร์กิวเมนต์ที่สองจริง ๆ แล้วจบลงด้วยความยาวเพื่อประกบกัน เนื่องจากไม่พบรายการสิ่งนี้จะประเมินarray.splice(-1,-1);
ซึ่งจะส่งผลให้ไม่มีการต่อเชื่อม ... ทั้งหมดโดยไม่ต้องเขียนลูปสำหรับสิ่งนี้
วิธีลบ 2 ออกจากอาร์เรย์อย่างปลอดภัยโดยใช้ vanilla JavaScript:
// Define polyfill for browsers that don't natively support Array.indexOf()
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement, fromIndex) {
var k;
if (this===null) {
throw new TypeError('"this" is null or not defined');
}
var O = Object(this),
len = O.length >>> 0;
if (len===0) return -1;
var n = +fromIndex || 0;
if (Math.abs(n)===Infinity) n = 0;
if (n >= len) return -1;
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
while (k < len) {
if (k in O && O[k]===searchElement) return k;
++k;
}
return -1;
};
}
// Remove first instance of 2 from array
if (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
/* To remove all instances of 2 from array, change 'if' to 'while':
while (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
*/
console.log(y); // Returns [1, 3]
แหล่งที่มาของ Polyfill: Mozilla
เพียงเพิ่มคำตอบจาก Sarfraz ไม่มีใครแปลกใจที่ทำให้มันกลายเป็นฟังก์ชั่น
ใช้คำตอบจาก ddagsan โดยใช้วิธี. filter ถ้าคุณมีค่าเดียวกันมากกว่าหนึ่งครั้งในอาเรย์ของคุณ
function arrayRemoveVal(array, removeValue){
var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
return newArray;
}
var promoItems = [1,2,3,4];
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>