Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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:在一个链中,如何获得上一个数组的大小?_Javascript_Arrays_This_Method Chaining - Fatal编程技术网

javascript:在一个链中,如何获得上一个数组的大小?

javascript:在一个链中,如何获得上一个数组的大小?,javascript,arrays,this,method-chaining,Javascript,Arrays,This,Method Chaining,当链接过滤器和reduce时,如何获得过滤后的数组的大小?我需要那个尺寸来裁剪响应性强的CSS设计。 我的(简化)代码使用回调的第3和第4个参数: 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

当链接过滤器和reduce时,如何获得过滤后的数组的大小?我需要那个尺寸来裁剪响应性强的CSS设计。 我的(简化)代码使用回调的第3和第4个参数:

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) =>
    el.appendChild(DOMtag(`article`, content(a,i))).parentElement,
    DOMtag('section',{'class':`media${this.length}`}));

有什么想法吗?

在传递
reduce
的默认值时,无法访问过滤后的数组长度,因为表达式是在调用
reduce
之前计算的

不过,您可以将函数的内容简化如下:

//示例数据
const json={articles:[{name:'test'},{},{name:'test2'},{},]};
//函数助手函数来说明示例
函数DOMTag(标记名,{content,className}){
常量标记=document.createElement(标记名);
如果(内容){
appendChild(document.createTextNode(content));
}
if(类名){
tag.className=className;
}
返回标签;
}
//实际应答代码的开始:
const section=json.articles
.filter(a=>a.name)
.map(a=>DOMTag(`article`,{content:a.name}))
.减少((p,c,i,a)=>
(p | | DOMTag('section',{className:`media${a.length}}})
.appendChild(c).parentElement
,空);
section.className=`media${section.childNodes.length}`
//验证

console.log(section.outerHTML)reducer函数中的第四个参数是源数组@库纳尔·博赫拉。是的,这是我在第一段代码中使用它的方式,但仅在回调中可用,而在reduce中不可用(不能用于初始值)。有一种方法可以将数组传递给回调(同步回调),因此我认为应该有一种方法将
绑定到该数组。你的变通方法2和3很有趣(1是不可链接的),但并不比我自己的第一个解决方案好多少。这是一个公平的观点。我不认为您可以按照您的思维方式使用
bind
,但您可以利用布尔表达式的惰性求值来简化初始代码。用一个可能也很有趣的新选项更新答案。我不明白为什么这个答案被否决了。至少上面的评论很有用。
json.articles
.filter(a => keep(a,name))
.reduce((el, a) =>
    el.appendChild(DOMtag(`article`, content(a,i))).parentElement,
    DOMtag('section',{'class':`media${this.length}`}));