내 코드왜 javascript 맵 함수가 undefined를 반환합니까?
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
이 다음과 같은 결과
["a","b",undefined]
내가 그것을 할 수있는 결과 array.How에서 정의하지 않으을 준다?
내 코드왜 javascript 맵 함수가 undefined를 반환합니까?
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
이 다음과 같은 결과
["a","b",undefined]
내가 그것을 할 수있는 결과 array.How에서 정의하지 않으을 준다?
항목이 문자열이 아닌 경우 아무 것도 반환하지 않습니다. 이 경우 함수는 undefined를 반환하고 결과에서 무엇을 보게됩니다.
map 함수는 한 값을 다른 값으로 매핑하는 데 사용되지만 맵 함수가 적합하지 않은 배열을 실제로 필터링하려고합니다.
실제로 원하는 것은 filter 기능입니다. 결과 배열에 항목을 표시할지 여부에 따라 true 또는 false를 반환하는 함수를 사용합니다.
var arr = ['a','b',1];
var results = arr.filter(function(item){
return typeof item ==='string';
});
아 ... 필터 기능이 있다는 것을 몰랐습니다. 감사합니다. –
이것은 꽤 의미가 있습니다. 나는. 내가 있었던 .map'ing was not .filtering ... 당신은 어떻게 알았 느냐?! 감사합니다 ^.^ – DigitalDesignDj
매우 논리적 인 감사합니다. @Ike –
현재 요소가 string
인 경우에만 값을 반환합니다. 아마도 충분 그렇지 않으면 빈 문자열을 할당 : 물론
var arr = ['a','b',1];
var results = arr.map(function(item){
return (typeof item ==='string') ? item : '';
});
, 당신은 어떤 문자열이 아닌 요소를 필터링하려면, 당신은 map()
을 사용할 수 없습니다. 오히려 filter()
기능을 사용해보아야합니다.
숫자가있는 경우 빈 문자열을 반환합니다. –
예, 알고 있습니다 ... – BenM
var arr = ['a','b',1];
var results = arr.filter(function(item){
if(typeof item ==='string'){return item;}
});
ES6 filter
은 (LINQ 등) 뾰족한 화살표 표기 지원하므로 :
['a','b',1].filter(item => 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
}, [])
그것을 문자열 않는 한 당신은 아무것도 반환하지 않기 때문에. 따라서 마지막 항목은'undefined'를 반환합니다. 문자열이 아니라면 무엇을 반환 할 것으로 예상합니까? 빈 문자열? – BenM
@BenM이 문자열이 아니면 반환하지 않습니다. 정의되지 않았습니다. –
잘못된 방법으로이 작업을 수행 한 것처럼 보입니다. 제안 된대로 필터를 사용합니다. –