내 코드
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
이것은 다음과 같은 결과를 제공합니다
["a","b",undefined]
결과 배열에서 undefined를 원하지 않습니다. 어떻게 할 수 있습니까?
답변
항목이 문자열이 아닌 경우 아무것도 반환하지 않습니다. 이 경우 함수는 결과에 표시되는 undefined를 반환합니다.
map 함수는 한 값을 다른 값에 매핑하는 데 사용되지만 실제로는 map 함수가 적합하지 않은 배열을 필터링하려는 것으로 보입니다.
실제로 원하는 것은 필터 기능입니다. 결과 배열에 항목을 포함할지 여부에 따라 true 또는 false를 반환하는 함수를 사용합니다.
var arr = ['a','b',1];
var results = arr.filter(function(item){
return typeof item ==='string';
});
답변
필터는 항목이 수정되지 않은 특정 경우에 작동합니다. 그러나 대부분의 경우 맵을 사용할 때 전달 된 항목을 수정하려고합니다.
그것이 당신의 의도라면 reduce 를 사용할 수 있습니다 .
var arr = ['a','b',1];
var results = arr.reduce((results, item) => {
if (typeof item === 'string') results.push(modify(item)) // modify is a fictitious function that would apply some change to the items in the array
return results
}, [])
답변
ES6 filter
는 LINQ와 같은 뾰족한 화살표 표기법을 지원 하므로 :
따라서 한 줄로 요약 할 수 있습니다.
['a','b',1].filter(item => typeof item ==='string');
답변
내 해결책은지도 뒤에 필터를 사용하는 것입니다.
이것은 모든 JS 데이터 유형을 지원해야합니다.
예:
const notUndefined = anyValue => typeof anyValue !== 'undefined'
const noUndefinedList = someList
.map(// mapping condition)
.filter(notUndefined); // by doing this,
//you can ensure what's returned is not undefined
답변
현재 요소가 인 경우에만 값을 반환합니다 string
. 아마도 빈 문자열을 할당하면 충분합니다.
var arr = ['a','b',1];
var results = arr.map(function(item){
return (typeof item ==='string') ? item : '';
});
물론 문자열이 아닌 요소를 필터링하려면 map()
. 오히려 filter()
함수 사용을 살펴 봐야 합니다.
답변
var arr = ['a','b',1];
var results = arr.filter(function(item){
if(typeof item ==='string'){return item;}
});
답변
아래 로직과 같이 구현할 수 있습니다. 값의 배열을 원한다고 가정하십시오.
let test = [ {name:'test',lastname:'kumar',age:30},
{name:'test',lastname:'kumar',age:30},
{name:'test3',lastname:'kumar',age:47},
{name:'test',lastname:'kumar',age:28},
{name:'test4',lastname:'kumar',age:30},
{name:'test',lastname:'kumar',age:29}]
let result1 = test.map(element =>
{
if (element.age === 30)
{
return element.lastname;
}
}).filter(notUndefined => notUndefined !== undefined);
output : ['kumar','kumar','kumar']