【发布时间】:2018-11-09 00:06:53
【问题描述】:
链接filter和reduce时,如何获取过滤后数组的大小?我需要这个尺寸来定制响应式设计 CSS。 我的(简化的)代码,使用回调的第三和第四个参数:
json.articles
.filter(a => keep(a,name))
.reduce((el, a,i,t) =>
i===0? DOMtag('section',{'class':`media${t.length}`})
.appendChild(DOMtag(`article`, content(a,0))).parentElement
: el.appendChild(DOMtag(`article`, content(a,i))).parentElement,
null);
或者,甚至更简单(感谢 luc 和他在下面的懒惰评估建议):
json.articles
.filter(a => keep(a,name))
.reduce((el, a,i,t) =>
(el || DOMtag('section',{'class':`media${t.length}`}))
.appendChild(DOMtag(`article`, content(a,i))).parentElement,
null);
两个代码都可以,但是如果有人想以某种方式绑定this,则可以使用累加器的初始值,例如:
json.articles
.filter(a => keep(a,name))
.reduce((el, a) =>
el.appendChild(DOMtag(`article`, content(a,i))).parentElement,
DOMtag('section',{'class':`media${this.length}`}));
有什么想法吗?
【问题讨论】:
-
reducer 函数中的第四个参数是源数组。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@kunal_bohra。是的,这就是我在第一个代码中使用它的方式,但只能在回调中使用,而不是在 reduce 中(不能用于初始值)。
标签: javascript arrays this method-chaining