gpt4 book ai didi

javascript - underscore.js 减少错误?与 Ruby 的行为不同?

转载 作者:行者123 更新时间:2023-12-02 18:33:02 27 4
gpt4 key购买 nike

看来underscore.js 的reduce 方法假设'memo' 值是一个标量,而Ruby 将接受一个通用对象。这是一个错误,是 underscore.js 的限制还是我搞砸了?

这是 Ruby 1.9.3 中的一个简单的 reduce 示例。

irb(main):020:0> a = [1, 1, 2, 2]
=> [1, 1, 2, 2]
irb(main):021:0> a.reduce([]) {|accum, nxt| accum.push(nxt)}
=> [1, 1, 2, 2]

这是我认为使用 _.js 的等效代码

var _ =Underscore.load();
function tryReduce() {
var a = [1, 1, 2, 2]
var b = _.reduce(a, function(out, nxt) {
return out.push(nxt);
}, [])
Logger.log(b)
}

在 Google 脚本中,代码炸弹带有

TypeError: Cannot find function push in object 1. (line 6, file "tryingStuff")

但是此代码运行并给出正确的结果,1006。

var _ =Underscore.load();
function tryReduce() {
var a = [1, 1, 2, 2]
var b = _.reduce(a, function(out, nxt) {
return out + nxt;
}, 1000)
Logger.log(b)
}

最佳答案

问题是 Array#push 在每种语言中返回不同的值。而Ruby's返回Array本身,JavaScript's返回更新后的长度

_.reduce() 可以与 Array 备忘录一起使用,但您必须确保 Array 是迭代器中返回的内容:

var b = _.reduce(a, function(out, nxt) {
out.push(nxt);
return out;
}, [])

否则,第一轮以 Number(长度)结束,并且下一轮会抛出错误,因为 Number#push 不会不存在。这是您提到的“标量”:

It appears that the reduce method of underscore.js assumes that the 'memo' value is a scalar

关于javascript - underscore.js 减少错误?与 Ruby 的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com