为什么该值在reduce范围内未定义,但在for循环中定义?(javascript)
我正在尝试编写一个函数来查找数组集合中的唯一值为什么该值在reduce范围内未定义,但在for循环中定义?(javascript),javascript,arrays,arguments,reduce,Javascript,Arrays,Arguments,Reduce,我正在尝试编写一个函数来查找数组集合中的唯一值 function uniteUnique(arr) { var args = Array.prototype.slice.call(arguments); var result = []; for (var i=0; i<args.length; i++){ console.log(args[i]); // as expected this evaluates to [1, 3, 2]
function uniteUnique(arr) {
var args = Array.prototype.slice.call(arguments);
var result = [];
for (var i=0; i<args.length; i++){
console.log(args[i]); // as expected this evaluates to [1, 3, 2]
// [5, 2, 1, 4]
// [2, 1]
}
args.reduce(function(arg){
console.log(arg + ' is the arg'); //for some reason arg is undefined
arg.map(function(val){
if (result.indexOf(val) < 0){
result.push(val);
}
return result;
});
}, result);
}
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
我可以给你一个很好的帮助。reduce的回调函数应该接收两个参数,累加器和正在迭代的数组的当前值,因此我认为它应该是这样的:
function uniteUnique(arr) {
var args = Array.prototype.slice.call(arguments);
var result = [];
var helper;
for (var i=0; i<args.length; i++){
console.log(args[i]);
}
args.reduce(function(acc, arg){
console.log(arg + ' is the arg');
helper = arg.map(function(val){
if (result.indexOf(val) < 0){
result.push(val);
}
return result;
});
return acc + helper;
}, result);
}
功能单元(arr){
var args=Array.prototype.slice.call(参数);
var结果=[];
辅助变量;
对于(var i=0;iYou定义了args
,但没有定义arg
?@TimothyG.arg
被很好地定义为reduce
回调的参数。这看起来不像reduce
的用例。它看起来更像是forEach
!@ibrahimmahrir不是一个大的javascript用户,所以我不知道。它只是一个s。)一个属性检查。代码中的问题是,您没有从reduce
的回调返回任何要用作新累加器(arg
)的内容。此代码也不起作用,因为您没有处理代码中的大象:reduce应该返回一些用作回调的第一个参数的内容(下一次迭代的累加器)!@BrunoSantos这看起来不错,但你好像忘记定义acc
@ibrahimmahrir你完全正确,我已经修复了,要编辑answer@DavidJ.问题是我的acc工作方式不对。我已经解决了问题的答案,但我知道你必须让它工作,所以,干得好!
function uniteUnique(arr) {
var args = Array.prototype.slice.call(arguments);
var result = [];
var helper;
for (var i=0; i<args.length; i++){
console.log(args[i]);
}
args.reduce(function(acc, arg){
console.log(arg + ' is the arg');
helper = arg.map(function(val){
if (result.indexOf(val) < 0){
result.push(val);
}
return result;
});
return acc + helper;
}, result);
}