2013-08-06 2 views
0

저는 다음과 같은 것을 많이 사용하고 있습니다. 하나의 라이너로 할 수 있습니까? 당신이 원하는 무엇다른 배열의 함수를 기반으로 배열을 만듭니다.

function anotherFunction(array) 
{ 
    new_array = []; 
    for (var i = 0; i < array.length; i++) 
    { 
     new_array.push(someFunction(array[i])); 
    } 
    return new_array; 
} 
+0

그래, 새 라인의;) * 그냥 농담 *을 제거하십시오. –

+0

array.push는 new_array.push이어야하고 반환 배열은 new_array를 반환해야한다고 생각합니다. –

답변

6

은에 기능 이상 "map"배열 :

var arr = [...]; 
var arr2 = arr.map(someFunction); 
+0

'Array.prototype.map'은 ES5이고 이전 브라우저와 호환되지 않습니다. =) – C5H8NNaO4

+0

IE8에서 지원됩니다. 배열 프로토 타입에 쉽게 붙일 수 있다고 생각합니다. 그 일을하는 것이 어떤 종류의주의 사항을 갖게된다면 리콜해야합니다. – Katana314

+1

설명서 링크는 이전 버전과의 호환성을 제공하며 많이 사용되는 ES5Shim 호환 라이브러리에는 IIRC가 포함되어 있습니다. – deceze

0

빠른 속도로 원하는 경우 ... Array.prototype.map 루프만큼 빠르지는 않습니다.

http://jsperf.com/array-map-vs-loop/2

그래서

:

function customMap(a,c){ 
var b=[],l=a.length; 
while(l--){ 
    b[l]=c(a[l]); 
} 
return b; 
} 

을이 매우 빠르고

var newArray=customMap(oldArray,function); 

로를 반환합니다.

사용자 정의 프로토 타입을 만들 수도 있습니다.

Object.defineProperty(Array.prototype,'CMap',{value:function(c){ 
var b=[],l=this.length;while(l--){b[l]=c(this[l])} 
return b; 
},writable:false,enumerable:false}); 

지도와 같이 사용하십시오.

var newArray=oldArray.CMap(function); 

EDIT 만 정의에있는 모든 변수는 외부 테스트 정의된다 .. 그래서 속도 기반

http://jsperf.com/custom-vs-map

여기

jsperf에서 테스트가 ... 기능.

이 모든 브라우저에서 작동합니다.

+0

변수 이름 길이는 성능에 영향을 미치지 않으므로 축소하지 않아도됩니다. P 예, Array.prototype.맵은 상식적인 루프보다 훨씬 복잡한 말미를 포함하므로 느립니다. – Esailija

+0

btw, jsperf 더 오해의 소지가 있고 잘못 될 수 없습니다 : ( – Esailija

+0

nah ... 정말 테스트 ... 난 그냥 jsperf의 첫 번째 링크를 가지고 ... 푸시 대 직접 설정 &지도 대 사용자 정의 기능이 느립니다 .. 또한 while - while 루프는 실제 세계에서 더 빠릅니다. jsperf에서 while 루프를 테스트 할 수도 없습니다. – cocco

관련 문제