Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线JS:减少到数组中会导致累加器上出现未定义的方法错误_Javascript_Arrays_Underscore.js_Reduce - Fatal编程技术网

Javascript 下划线JS:减少到数组中会导致累加器上出现未定义的方法错误

Javascript 下划线JS:减少到数组中会导致累加器上出现未定义的方法错误,javascript,arrays,underscore.js,reduce,Javascript,Arrays,Underscore.js,Reduce,我的代码与此类似,我试图用它生成一个由三个子数组组成的数组: f = [1, 2.5, 3, 10] p = [1.2, 5.1, 6.3, 11] r = [1, 1, 1, 1] coords = _.reduce([f, p, r], function(memo, series){ if(series.length){ memo.push(_.map(series, function(s, i){ return {x: s, y: i*10

我的代码与此类似,我试图用它生成一个由三个子数组组成的数组:

f = [1, 2.5, 3, 10]
p = [1.2, 5.1, 6.3, 11]
r = [1, 1, 1, 1]

coords = _.reduce([f, p, r], function(memo, series){
    if(series.length){
        memo.push(_.map(series, function(s, i){
            return {x: s, y: i*100};
        }));
    }
}, []);

console.log(coords);
最终结果应该如下所示:

[
  [{x:1,y:100},{x:2,y:2.5}...],
  [{x:1,y:12},{x:2,y:51}...]
]

但是,当我尝试执行代码时,它返回
无法读取未定义的属性push
。当我检查Chrome中的错误时,它会指向
memo.push
行。代码对我来说似乎没问题,但我不知道我的错误在哪里。非常感谢您的帮助。

reduce方法需要返回一些值,以便下一次迭代作为输入

如果您单步执行代码(将
调试器
语句放在
.reduce
之前),您可以看到它第一次成功,但在第二个循环中未定义
备注

在这种情况下,您可能希望从reduce返回
memo
,无论是否向其中添加了新元素(如果序列为空,则继续转到下一个序列)

比如:

f=[1,2.5,3,10]
p=[1.2,5.1,6.3,11]
r=[1,1,1,1]
coords=.reduce([f,p,r],函数(memo,series){
if(系列长度){
备忘录推送图(系列,功能(s,i){
返回{
x:s,
y:i*100
};
}));
}
返回备忘录;
}, []);

控制台日志(coords)
您必须
从reduce回调返回
某个值,以成为新的累加器值。否则,在下一次迭代和最终结果中,
memo
将返回为
undefined

A
返回备忘录
会解决这个问题,但是我觉得您实际上不想使用
reduce

var coords = _.map(_.filter([f, p, r], function(series) {
    return series.length; // > 0
}), function(nonemptyseries) {
    return _.map(nonemptyseries, function(s, i){
        return {x: s, y: i*100};
    });
});

我明白了!此外,为什么你建议MAP+FETCH ORDER?@凯文惠特克:因为这是你的函数实际上正在做的,并且它更具描述性:-没有丑陋的代码>推/ <代码>需要调用。你也可以考虑<代码> >链<代码>,而不是嵌套多个<代码> map < /代码>和<代码>过滤器< /代码>调用(我发现它更容易阅读)@ @ Sube:是的,我想过它(或者更好的缩进),但基本上这是个人的选择,我只是使用了与OP相同的非OOP风格。