在Ubuntu中使用nodejs。我一直在阅读JavaScript forEach()
方法的MDN文档。我知道还有其他方法可以做到这一点,但我从实践中学习;我正在尝试使数组copy
成为arr
数组中值的唯一集合;没有重复。我想使用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)
答案 0 :(得分:3)
尝试:
arr.forEach(function(element) {
if (!copied.includes(element)) {
copied.push(element);
}
});
forEach回调的第二个参数是索引,而不是您尝试填充的数组。另外,根据您的代码示例,您引用了copy
undefined
,而正确的变量名为copied
。
在您编辑代码之后,对于forEach回调的数组和第二个参数都使用名称copy
(为什么你需要forEach回调的第二个参数 - 顺便说一下 - 这是索引,而不是"复制" - 无论你的意思是什么副本:P)。
因此,您收到的错误是Number.prototype
没有名为includes()
的方法,这是正确的,因为索引是Number
。
总结一下:
arr.forEach(function(element) {
if (!copy.includes(element)) {
copy.push(element);
}
});
答案 1 :(得分:1)
forEach回调的第二个参数是索引,并且通过提及副本作为第二个参数,您将获得索引而不是之前声明的数组。所以你要做的是0.includes
实际上不是一个函数。删除第二个参数将解决您的问题
arr.forEach(function(element) {
if (!copy.includes(element)) {
copy.push(element);
}
});