어레이 맵을 사용하여 조건부로 결과 필터링
어레이 맵을 사용하여 오브젝트를 조금 더 필터링하여 서버로 보낼 준비를 하려고 합니다.1개의 키 값으로 필터링 할 수 있기 때문에 매우 좋지만, 한 걸음 더 나아가 부울값과 대조해 보고 싶습니다.
그래서 지금 내가 가진 건 이거야
$scope.appIds = $scope.applicationsHere.map( function(obj){
if(obj.selected == true){
return obj.id;
}
});
이 방법은 ID를 추출하는 데 매우 효과적이지만 선택한 값이 == false일 경우 이 새 배열에 푸시하고 싶지 않으므로 추가 필터링 조건을 붙였습니다.이렇게 하면 ID 배열을 얻을 수 있지만 .select == false를 선택한 ID는 null 값만으로 배열에 남아 있습니다.오브젝트에 4개의 아이템이 있고 그 중 2개가 false일 경우 다음과 같습니다.
appIds = {id1, id2, null, null};
내 질문은 - 거기에 null을 넣지 않고 이것을 할 수 있는 방법이 있느냐는 것이다.읽어주셔서 감사합니다!
고객님이 찾고 있는 것은.filter()
기능:
$scope.appIds = $scope.applicationsHere.filter(function(obj) {
return obj.selected;
});
그러면 "선택된" 속성이 다음과 같은 개체만 포함하는 배열이 생성됩니다.true
(또는 truthy).
커피를 마시고 있었는데 댓글을 놓쳐서 죄송합니다.- 네, jandy가 댓글에서 언급했듯이 "id" 값만 필터링하고 추출하면 다음과 같습니다.
$scope.appIds = $scope.applicationsHere.filter(function(obj) {
return obj.selected;
}).map(function(obj) { return obj.id; });
일부 기능 라이브러리(내 생각에 충분한 사랑을 받지 못하는 기능)는.pluck()
오브젝트 리스트에서 속성값을 추출하는 함수입니다만, 네이티브 자바스크립트에는 이러한 툴이 매우 희박합니다.
이를 수행하려면 Array.protype.reduce를 사용해야 합니다.JS 퍼포먼스 테스트를 조금 실시해, 이 테스트의 퍼포먼스를 검증했습니다..filter
+.map
.
$scope.appIds = $scope.applicationsHere.reduce(function(ids, obj){
if(obj.selected === true){
ids.push(obj.id);
}
return ids;
}, []);
알기 쉽게 하기 위해 여기 샘플이 있습니다..reduce
JSPerf 테스트에서 사용:
var things = [
{id: 1, selected: true},
{id: 2, selected: true},
{id: 3, selected: true},
{id: 4, selected: true},
{id: 5, selected: false},
{id: 6, selected: true},
{id: 7, selected: false},
{id: 8, selected: true},
{id: 9, selected: false},
{id: 10, selected: true},
];
var ids = things.reduce((ids, thing) => {
if (thing.selected) {
ids.push(thing.id);
}
return ids;
}, []);
console.log(ids)
편집 1
참고: 2018년 2월 기준으로 축소 + 푸시 속도는 Chrome 및 Edge에서 가장 빠르지만 Firefox의 Filter + Map보다 느립니다.
platMap을 사용할 수 있습니다.필터링과 매핑을 하나로 할 수 있습니다.
$scope.appIds = $scope.applicationsHere.flatMap(obj => obj.selected ? obj.id : [])
2019년에 누가 이걸 보게 되면 알려드릴게요.
reduce vs map + filter는 루프에 필요한 항목에 따라 다를 수 있습니다.확실하진 않지만 줄이는 게 더 느린 것 같아요.
한 가지 확실한 것은 성능 향상을 원하신다면 코드 작성 방법이 매우 중요하다는 것입니다.
여기에서는 "잘못된" 값을 확인하는 대신 코드를 완전히 입력했을 때 크게 개선되었음을 보여주는 JS 성능 테스트(예:if (string) {...}
거짓
이게 도움이 됐으면 좋겠는데
심플한 솔루션
SomeArrayValues.filter(x=> x.id !== idNameDetailsColorDto.id).map(ids => (ids.id))
언급URL : https://stackoverflow.com/questions/26716818/using-array-map-to-filter-results-with-if-conditional
'programing' 카테고리의 다른 글
Wordpress에서 하나의 Contact Form 7 폼에서 다른 폼으로 값을 전달하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
---|---|
WooCommerce에서 PHP를 사용하여 ID로 제품 삭제 (0) | 2023.03.22 |
Spring Boot에서 @WebMvcTest의 Spring Security 설정 클래스를 비활성화합니다. (0) | 2023.03.22 |
관계형 데이터베이스에 비해 MongoDB와 같은 스키마가 없는 데이터베이스를 사용하는 장점은 무엇입니까? (0) | 2023.03.22 |
단일 제품 페이지를 비활성화/숨기는 방법 (0) | 2023.03.22 |