使用Javascript

时间:2017-11-16 09:32:21

标签: javascript dom reduce

我尝试使用reduce在一个字符串中连接页面上每个段落标记的内部HTML。这是我的尝试:



// JS
let par = Array.from(document.getElementsByTagName("p"));
document.write(par.reduce((a, b) => a + ", " + b.innerHTML));

<!-- HTML -->
<p>Apple</p>
<p>Strawberry</p>
<p>Banana</p>
&#13;
&#13;
&#13;

这是(错误的)输出:

  

[object HTMLParagraphElement],Strawberry,Banana

我做错了什么?

非常感谢你的帮助!

5 个答案:

答案 0 :(得分:3)

function(){ var ec = {{Click Element}}; var x = $(ec).closest('span'); return x.innerText; } 函数接受第二个参数,它是reduce的初始值。

默认情况下,它是数组中的第一项。

要获得所需的结果,您应该编写如下代码:

accumulator

以下是来自MDN的let par = Array.from(document.getElementsByTagName("p")); document.write(par.reduce((a,b)=>a+", "+b.innerHTML, "")); 函数的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=a

答案 1 :(得分:2)

您应该为reduce方法传递第二个参数(初始值):

par.reduce((a,b)=>a+", "+b.innerHTML, '')

答案 2 :(得分:0)

如下:

let par = Array.from(document.getElementsByTagName("p"));
document.write(par.map(a=> a.innerHTML).join())

答案 3 :(得分:0)

正如@hsz所写,你应该使用空字符串累加器来使你的例子工作:

let par = Array.from(document.getElementsByTagName("p")); 
document.write(par.reduce(par.reduce((a,b) => a + ", " + b.innerHTML, '');

但您也可以先映射数组并获取innerHTML属性,然后减少

let par = Array.from(document.getElementsByTagName("p")); 
document.write(par.map(a => a.innerHTML).reduce((a, b) => a + ", " + b));

答案 4 :(得分:0)

一个好的解决方案是使用reduce创建一个包含段落实际内容的数组。

然后通过使用/* Cache the p elements found. */ let pElems = document.getElementsByTagName("p"); /* Create an array containing the innerHTML of each 'p' element. */ let par = [].map.call(pElems, (a)=>a.innerHTML); /* Use 'reduce' to combine them (passing the emoty string as the accumulator. */ document.write(par.reduce((a, b) => a + ", " + b), "");,将空字符串作为累加器(第二个参数)传递,您可以获得组合内容的字符串。

<强>脚本:

&#13;
&#13;
<!-- HTML -->
<p>Apple</p>
<p>Strawberry</p>
<p>Banana</p>
&#13;
document.write([].map.call(document.getElementsByTagName("p"), (a)=>a.innerHTML).reduce((a, b) => a + ", " + b), "");
&#13;
&#13;
&#13;

<强>一衬垫:

&#13;
&#13;
<!-- HTML -->
<p>Apple</p>
<p>Strawberry</p>
<p>Banana</p>
&#13;
import numpy as np, pandas as pd
df=pd.DataFrame()
df['a']=np.arange(0,9)
df.iloc[0,0]='test'
print(df.dtypes)
print(type(df.iloc[0,0]))
print(type(df.iloc[1,0]))
&#13;
&#13;
&#13;