Underscore JS:缩减为数组会导致累加器出现未定义的方法错误
Underscore JS: reducing into an array causes undefined method error on the accumulator
我有看起来与此类似的代码,我试图用它来生成一个由三个子数组组成的数组:
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}...]
]
但是,当我尝试执行代码时,它 returns cannot read property push of undefined
。当我检查 Chrome 中的错误时,它指向 memo.push
行。代码 似乎 对我来说没问题,但我不知道我的错误在哪里。感谢任何帮助。
_.reduce
方法需要 return 一些值,以便下一次迭代作为输入。
如果你单步执行代码(在_.reduce
之前放一个debugger
语句),你可以看到第一次成功了,但是第二次memo
是未定义的循环。
在这种情况下,您可能希望从 reduce 中 return 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], function(memo, series) {
if (series.length) {
memo.push(_.map(series, function(s, i) {
return {
x: s,
y: i * 100
};
}));
}
return memo;
}, []);
console.log(coords);
您必须 return
来自 reduce 回调的内容才能成为新的累加器值。否则 memo
将在下一次迭代和最终结果中返回为 undefined
…
A return memo;
会解决这个问题,但我觉得你实际上不想使用 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};
});
});
我有看起来与此类似的代码,我试图用它来生成一个由三个子数组组成的数组:
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}...]
]
但是,当我尝试执行代码时,它 returns cannot read property push of undefined
。当我检查 Chrome 中的错误时,它指向 memo.push
行。代码 似乎 对我来说没问题,但我不知道我的错误在哪里。感谢任何帮助。
_.reduce
方法需要 return 一些值,以便下一次迭代作为输入。
如果你单步执行代码(在_.reduce
之前放一个debugger
语句),你可以看到第一次成功了,但是第二次memo
是未定义的循环。
在这种情况下,您可能希望从 reduce 中 return 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], function(memo, series) {
if (series.length) {
memo.push(_.map(series, function(s, i) {
return {
x: s,
y: i * 100
};
}));
}
return memo;
}, []);
console.log(coords);
您必须 return
来自 reduce 回调的内容才能成为新的累加器值。否则 memo
将在下一次迭代和最终结果中返回为 undefined
…
A return memo;
会解决这个问题,但我觉得你实际上不想使用 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};
});
});