성능 만! 이 코드는 아마도 여기의 모든 코드보다 10 배 빠를 것입니다. * 모든 브라우저에서 작동하며 메모리에 미치는 영향이 가장 적습니다.
이전 배열을 재사용 할 필요가 없다면 btw 필요한 다른 작업을 고유하게 변환하기 전에 수행하는 것이 가장 빠른 방법 일 것입니다.
var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];
그럼 당신은 이것을 시도 할 수 있습니다
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];
function toUnique(a, b, c) { //array,placeholder,placeholder
b = a.length;
while (c = --b)
while (c--) a[b] !== a[c] || a.splice(c, 1);
return a // not needed ;)
}
console.log(toUnique(array));
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]
이 기사를 읽는이 기능을 생각해 냈습니다 ...
http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/
나는 for 루프를 좋아하지 않는다. while- 루프와 같은 많은 매개 변수가 있습니다. while은 우리가 좋아하는 크롬을 제외한 모든 브라우저에서 가장 빠른 루프입니다.
어쨌든 나는 while을 사용하는 첫 번째 함수를 작성했습니다. 그렇지만 기사에서 찾은 함수보다 약간 빠릅니다.unique2()
다음 단계는 현대 js를 사용합니다. Object.keys
다른 for 루프를 js1.7의 Object.keys로 대체했습니다 (크롬 2 배 빠름); 부족한!. unique3()
.
이 시점에서 저는 제 고유 한 기능에 정말로 필요한 것이 무엇인지 생각하고있었습니다. 오래된 배열이 필요하지 않습니다. 빠른 기능을 원합니다. 그래서 2 개의 while 루프 + 스플 라이스를 사용했습니다.unique4()
내가 감동했다고 말할 수 없다.
크롬 : 일반적인 초당 150,000 작업이 초당 1,800,000 작업으로 증가했습니다.
즉 : 80,000 op / s vs 3,500,000 op / s
iOS : 18,000 op / s vs 170,000 op / s
사파리 : 80,000 op / s vs 6,000,000 op / s
증명
http://jsperf.com/wgu 또는 더 나은 console.time ... microtime ...을 사용하십시오.
unique5()
이전 배열을 유지하려는 경우 어떻게되는지 보여줄뿐입니다.
당신 Array.prototype
이 무엇을하고 있는지 모른다면 사용하지 마십시오 . 나는 방금 복사와 과거를 많이했다. Object.defineProperty(Array.prototype,...,writable:false,enumerable:false})
기본 프로토 타입을 생성하려는 경우 사용 합니다. 예 : https://stackoverflow.com/a/20463021/2450730
데모
http://jsfiddle.net/46S7g/
참고 :이 작업을 수행하면 기존 어레이가 파괴 / 독립됩니다.
위의 코드를 읽을 수없는 경우 자바 스크립트 책을 읽거나 짧은 코드에 대한 설명을 참조하십시오. https://stackoverflow.com/a/21353032/2450730
일부는 사용하고 있습니다 indexOf
...하지 마십시오 ... http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
빈 배열
!array.length||toUnique(array);