질문: 중복된 값을 제거하는 함수를 작성해 달라는 요청 주어진 배열에서 .
예:
배열 a = [0, 8, 5, 4, 78, 8, 90, 4, 'a', 'b', 'a']를 전달합니다.
필수 반환: [ 0,4,5,8,78,90,a,b]
인터뷰를 마치고 이 질문에 대해 여러 번 생각해 보았으나 아직까지 해결책이 떠오르지 않았습니다. 시간 복잡도가 낮은 방법. 어제 오후 기숙사에서 "The Essence of JavaScript Language"를 읽다가 책에서 뭔가를 촉발시키는 코드를 보고 jsfiddle에서 테스트해봤는데 성공했습니다. 코드는 다음과 같습니다(완전한 버전은 jsfiddle 참조)
var getNR = 함수(src) {
src = src [];
var res =
var curr = []
var i, j = 0 ,temp, 이름
for (i = 0; i < src.length; i ) {
temp = src[i]
if (res[temp]) {
//
} else {
res[temp] = 1;
}
}
for (res의 이름) {
if (res.hasOwnProperty(name)) {
curr[j ] = name ;
}
}
return curr;
}
내 생각을 요약하자면:
아이디어 1: 대상 배열을 선택한 다음 순서대로 중복 배열을 삭제합니다. 그러나 이렇게 하면 중복 요소가 삭제될 뿐만 아니라 배열의 원래 요소 속성도 변경됩니다. 이는 분명히 요구 사항인 del을 준수하지 않습니다.
아이디어 2: 새 배열 b를 만들고, a의 요소를 b로 푸시합니다. 단, 푸시하기 전에 요소가 존재하는지 확인하세요. 이 시간 복잡도는 n*n이며, 이는 가장 간단하고 어리석은 방법입니다.
아이디어 3: 아이디어 2와 비슷하지만 js 객체의 속성을 최대한 활용하고, 새로운 빈 객체를 생성하고, as 속성의 요소를 객체에 추가하고, 추가하기 전에 해당 속성이 이미 존재하는지 확인합니다. . 모두 추가한 후 객체의 속성을 순서대로 배열에 넣고 반환합니다.
Meituan 인터뷰 질문에는 이 질문의 변형이 있습니다.
Array 클래스에 메서드를 추가해야 하며, 임의의 배열 메소드에 대해 이 메소드를 호출하고 배열에서 중복 요소를 제거하십시오.
이 변형 질문은 프로토타입, 이에 대한 이해 등을 포함하여 더 많은 지식 포인트를 테스트합니다.