이 코드가 있다고 가정 해보십시오.
var arr = [{id : 1, name : 'a'}, {id : 2, name : 'b'}, {id : 3, name : 'c'}];
배열에서 id = 3 인 항목을 제거하고 싶습니다. 접합하지 않고 이것을 수행하는 방법이 있습니까? 밑줄이나 그와 비슷한 것을 사용하여 뭔가를 할 수 있습니까?
감사!
이 코드가 있다고 가정 해보십시오.
var arr = [{id : 1, name : 'a'}, {id : 2, name : 'b'}, {id : 3, name : 'c'}];
배열에서 id = 3 인 항목을 제거하고 싶습니다. 접합하지 않고 이것을 수행하는 방법이 있습니까? 밑줄이나 그와 비슷한 것을 사용하여 뭔가를 할 수 있습니까?
감사!
답변:
일반 JavaScript를 사용하면 이미 답변되었습니다 : 객체 속성으로 배열에서 객체 제거 .
underscore.js를 사용하면 다음 .findWhere
과 결합 할 수 있습니다 .without
.
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
//substract third
arr = _.without(arr, _.findWhere(arr, {
id: 3
}));
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
어쨌든이 경우 새 배열을 작성하기 때문에 다른 질문에 표시된 것처럼 _.filter
또는 기본 Array.prototype.filter
기능을 간단히 사용할 수 있습니다 . 그런 다음 여기와 같이 잠재적으로 두 배가 아닌 배열을 한 번만 반복합니다.
배열 을 제자리에서 수정하려면 을 사용해야 .splice
합니다. 이것은 다른 질문에도 나와 있으며 undescore는 유용한 기능을 제공하지 않는 것 같습니다.
_.reject
더 나은 선택처럼 보입니다.
arr.pop()
...
밑줄을 사용할 수 있습니다 .filter
var arr = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var filtered = _(arr).filter(function(item) {
return item.id !== 3
});
다음과 같이 쓸 수도 있습니다 :
var filtered = arr.filter(function(item) {
return item.id !== 3
});
var filtered = _.filter(arr, function(item) {
return item.id !== 3
});
당신은 또한 사용할 수 있습니다 .reject
_()
는 컬렉션 주위에 래퍼를 생성하여 밑줄 메서드를 호출 할 수 있습니다.
밑줄 사용 _.reject()
:
arr = _.reject(arr, function(d){ return d.id === 3; });
arr = _.reject(arr, d => d.id === 3 );
Underscore에는 _without () 메서드가 있으며 특히 제거 할 객체가있는 경우 배열에서 항목을 제거하는 데 적합합니다.
값의 모든 인스턴스가 제거 된 배열의 복사본을 반환합니다.
_.without(["bob", "sam", "fred"], "sam");
=> ["bob", "fred"]
더 복잡한 객체에서도 작동합니다.
var bob = { Name: "Bob", Age: 35 };
var sam = { Name: "Sam", Age: 19 };
var fred = { Name: "Fred", Age: 50 };
var people = [bob, sam, fred]
_.without(people, sam);
=> [{ Name: "Bob", Age: 35 }, { Name: "Fred", Age: 50 }];
제거 할 항목, 그것은 단지 재산이없는 경우, 당신이 사용할 수있는 _.findWhere
다음과 _.without
.
문자열을 필터링하고 대소 문자를 구분하지 않는 필터를 찾는 경우주의하십시오. _.without ()은 대소 문자를 구분합니다. 아래와 같이 _.reject ()를 사용할 수도 있습니다.
var arr = ["test","test1","test2"];
var filtered = _.filter(arr, function(arrItem) {
return arrItem.toLowerCase() !== "TEST".toLowerCase();
});
console.log(filtered);
// ["test1", "test2"]
var filtered1 = _.without(arr,"TEST");
console.log(filtered1);
// ["test", "test1", "test2"]
var filtered2 = _.reject(arr, function(arrItem){
return arrItem.toLowerCase() === "TEST".toLowerCase();
});
console.log(filtered2);
// ["test1", "test2"]
사용 사용할 수 있습니다 일반 자바 스크립트 의 Array#filter
다음과 같은 방법을 :
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var filteredArr = arr.filter(obj => obj.id != 3);
console.log(filteredArr);
또는 다음 Array#reduce
과 Array#concat
같은 사용 및 방법 :
var arr = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var reducedArr = arr.reduce((accumulator, currObj) => {
return (currObj.id != 3) ? accumulator.concat(currObj) : accumulator;
}, []);
console.log(reducedArr);
노트: