2017-11-07 1 views
0

우분투에서 nodejs 사용. JavaScript forEach() 메서드에 대한 MDN 문서를 읽었습니다. 나는 이것을 할 수있는 다른 방법이 있다는 것을 이해하지만, 나는하는 것으로 배웁니다. 배열 copy 배열의 값을 arr 배열의 고유 한 컬렉션을 만들려고 노력하고있어; 중복이 없습니다. 나는 forEach() 방법을 사용하여 이것을하고 싶다.JavaScript forEach() 메소드 혼동

셋업 :

var arr = [1, 2, 3, 4, 4, 3, 2]; 
var copy = []; 

왜이 일을 하는가?

copy.includes(1); // returns false 

그래도 되나요? 여기

arr.forEach(function(element, copy) { 
if (!copy.includes(element)) { 
    copy.push(element); 
} 
}); 

그리고

오류입니다 :

TypeError: copy.includes is not a function 
    at repl:2:11 
    at Array.forEach (native) 
    at repl:1:5 
    at ContextifyScript.Script.runInThisContext (vm.js:23:33) 
    at REPLServer.defaultEval (repl.js:339:29) 
    at bound (domain.js:280:14) 
    at REPLServer.runBound [as eval] (domain.js:293:12) 
    at REPLServer.onLine (repl.js:536:10) 
    at emitOne (events.js:101:20) 
    at REPLServer.emit (events.js:191:7) 
+1

JavaScript를 배우는 가장 좋은 방법은 다음과 같습니다. 또한이 게시물에 설명 된 복제본을 제거하는 다른 방법을 이용할 수도 있습니다. https://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array – John

답변

1

foreach는 콜백의 두 번째 인수는 인덱스, 그리고 두 번째 인수로 사본을 언급함으로써, 당신은 인덱스와 배열이 이전에 선언하지를 얻고있다. 그래서 당신이하려고하는 것은 실질적으로 기능이 아닌 0.includes입니다. 두 번째 인수를 제거하면 문제가 해결됩니다.

arr.forEach(function(element) { 
if (!copy.includes(element)) { 
copy.push(element); 
} 
}); 
+1

그건 속임수 였어. 나는 지금 내가 문서를 오해 한 것을 본다. MDN 문서가 멍청한 사람들에게 너무 비우호적 인 이유는 무엇입니까? 나는 forEach() 메소드에 대해 2 시간을 보냈다. –

3

시도 : foreach는 콜백의

arr.forEach(function(element) { 
if (!copied.includes(element)) { 
    copied.push(element); 
} 
}); 

두 번째 인수는 채우기 위해 노력하고 인덱스가 아닌 배열입니다. 또한 copyundefined이고 올바른 변수는 코드 예에 따라 copied입니다.

편집

당신이 모두 배열 및 foreach는 콜백의 두 번째 인수 (대한 이름 copy를 사용하여 코드를 편집 한 후

도대체 당신은 foreach는 콜백의 두 번째 인수해야하는 이유 - 그런데 - 인덱스되지 않습니다 "copy"- 당신이 의미하는 것은 무엇이든간에 : P).

따라서 색인이 Number이기 때문에 Number.prototype에는 includes()이라는 메소드가 없습니다라는 오류가 발생합니다.

요약하면 :

arr.forEach(function(element) { 
if (!copy.includes(element)) { 
    copy.push(element); 
} 
}); 
+0

편집을 참조하십시오. 고유 한 값의 배열은 항상'copy'라고합니다. 그것은 내 편이 편집 오류였습니다. 내 사과. –

+1

두 변수의 이름을 똑같이 지정하십시오. for each 콜백의 두 번째 인수는'copy'라고 부를 수 없습니다. –

+2

@SeanValdivia 문제를 해결하지 않았습니다. 명백한 이유가 없으므로 여기에'copy'가 있습니다 :'function (element, copy) <----' – JLRishe