다음과 같은 배열이 있습니다. var y = [1, 2, 3];
2
array 에서 제거 하고 싶습니다 y
.
jQuery를 사용하여 배열에서 특정 값을 제거하려면 어떻게합니까? 나는 시도 pop()
했지만 항상 마지막 요소를 제거합니다.
다음과 같은 배열이 있습니다. var y = [1, 2, 3];
2
array 에서 제거 하고 싶습니다 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 );
native .splice()
및 jQuery를 사용합니다 $.inArray()
.
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 를 사용할 수 있습니다 . 정말 간단합니다.
귀하의 경우 작성해야 할 모든 코드는-
_.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')
//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/
내 버전의 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)
색인 필수 사항. 항목을 추가 / 제거 할 위치를 지정하는 정수입니다. 음수 값을 사용하여 배열 끝에서 위치를 지정하십시오.
howmany 필수. 제거 할 항목 수입니다. 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 });
다음과 같이 pick_and_remove()
함수로 Array 클래스를 확장했습니다 .
var ArrayInstanceExtensions = {
pick_and_remove: function(index){
var picked_element = this[index];
this.splice(index,1);
return picked_element;
}
};
$.extend(Array.prototype, ArrayInstanceExtensions);
약간 장황하게 보일 수 있지만 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`},
여기에서 두 번째로 많이 찬성 된 답변은 OP가 원하는 의도 된 동작에 대한 한 줄짜리 jQuery 메소드에 가능한 가장 가까운 트랙에 있지만 코드 끝에서 우연히 발견되었으며 결함이 있습니다. 제거 할 항목이 실제로 배열에 없으면 마지막 항목이 제거됩니다.
일부는이 문제를 발견했으며 일부는이를 방지하기 위해 반복하는 방법을 제공했습니다. 나는 찾을 수있는 가장 짧고 가장 깨끗한 방법을 제공 하며이 방법에 따라 코드를 수정하는 방법에 대한 답변 아래에 의견을 제시했습니다.
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);
배열 x 는 "bye"요소를 쉽게 제거하고 배열 y 는 변경되지 않습니다.
인수 $.inArray(removeItem,array)
를 두 번째 인수 로 사용하면 실제로 접속할 길이가됩니다. 항목을 찾지 못 했으므로로 평가 array.splice(-1,-1);
하지 않고 연결되지 않습니다.
바닐라 JavaScript를 사용하여 어레이에서 2를 안전하게 제거하려면 :
// 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]
폴리 필 소스 : Mozilla
Sarfraz의 답변에 추가하기 위해 아무도 그것을 기능으로 만들지 않았습니다.
배열에서 동일한 값을 두 번 이상 가진 경우 .filter 메소드를 사용하여 ddagsan의 답을 사용하십시오.
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>