如何对 ko observable 的值求和
How to sum the values of a ko observable
更新一个非常旧的应用程序。 Rails 3.22.xx -> 4.2.xx
此代码用于工作
ko.observable(ko.utils.arrayMap(@posts(), (page) -> page.unread_count()).sum())
它会 return 总数,例如 15
。
升级到Rails4.2后returns
Uncaught TypeError: ko.utils.arrayMap(...).sum is not a function
我不确定如何得到这个,所以我可以 return 该值的总和。如果我删除总和,它 return 是所有值的数组,类似于 1,0,0,0,10,0,20
。似乎我需要这个值来求和,因为它是作为一种方法从视图中调用的,所以如果我只是添加一个 for 循环并将所有这些相加然后分配给变量,视图仍然会中断。
你真的不需要再使用 knockout utils,所有浏览器都实现了 Array.prototype.map:
ko.observable(@posts().map((page) -> page.unread_count()).reduce((x, y) -> x + y, 0)))
或者简单地说javascript
ko.observable(this.posts().map(function(page) {
return page.unread_count()
}).reduce(function(x, y) {
return x + y
}, 0)))
我对 rails 一无所知,所以不确定为什么它在更新时崩溃了...但我知道 sum
不是 javascript 中的默认数组方法.
我建议您尝试将其替换为 reduce
:
[1,0,0,0,10,0,20].reduce((a, b) => a + b, 0) // returns 31
你也可以像这样求和跳过map
操作:
posts().reduce(
(total, post) => total + post.unread_count(),
0
)
更新一个非常旧的应用程序。 Rails 3.22.xx -> 4.2.xx
此代码用于工作
ko.observable(ko.utils.arrayMap(@posts(), (page) -> page.unread_count()).sum())
它会 return 总数,例如 15
。
升级到Rails4.2后returns
Uncaught TypeError: ko.utils.arrayMap(...).sum is not a function
我不确定如何得到这个,所以我可以 return 该值的总和。如果我删除总和,它 return 是所有值的数组,类似于 1,0,0,0,10,0,20
。似乎我需要这个值来求和,因为它是作为一种方法从视图中调用的,所以如果我只是添加一个 for 循环并将所有这些相加然后分配给变量,视图仍然会中断。
你真的不需要再使用 knockout utils,所有浏览器都实现了 Array.prototype.map:
ko.observable(@posts().map((page) -> page.unread_count()).reduce((x, y) -> x + y, 0)))
或者简单地说javascript
ko.observable(this.posts().map(function(page) {
return page.unread_count()
}).reduce(function(x, y) {
return x + y
}, 0)))
我对 rails 一无所知,所以不确定为什么它在更新时崩溃了...但我知道 sum
不是 javascript 中的默认数组方法.
我建议您尝试将其替换为 reduce
:
[1,0,0,0,10,0,20].reduce((a, b) => a + b, 0) // returns 31
你也可以像这样求和跳过map
操作:
posts().reduce(
(total, post) => total + post.unread_count(),
0
)