1

根据此处给出的解决方案:创建链接到 csv 文件的表

我不明白这部分代码会发生什么:

var cells = rows.selectAll("td")
        .data(function(row) {
            return columns.map(function(column) {
                return row[column];
            });
        })

我知道 data() 将在我的数组“行”中的每个元素上循环,并且 Array.prototype.map() 将“创建一个新数组,其结果是对该数组中的每个元素调用提供的函数”。

return columns.map(function(column),“列”到底是什么?

如果有人能逐步解释两个匿名函数形成的循环,我将不胜感激。

4

1 回答 1

4

这是一个嵌套选择的例子。要理解它,您还需要考虑将数据绑定到行之前的代码。

在这段代码中发生的事情是,您告诉data()函数考虑在上一次data()调用中传入的数组的每个单独元素

var rows = tbody.selectAll("tr")
    .data(data)
    ...

现在将依次处理并调用这些元素中的每一个row。内部匿名函数获取这一行,并且对于 的每个元素columns,从中获取row由特定指定的元素column

也就是说,row是一个关联数组(或对象),其键名与数组中的元素名称相同columns。它将这些map元素提取到一个数组中,然后将其用作特定td单元格的数据。

在所有内部处理之后,将一个数组传递给data()——尽管传入了一个数组元素,但还是返回了一个数组。这样,可以使用行和列创建表(这就是嵌套选择的重点)。绑定到每个td单元格的东西是最里面的return返回值。

为了回答您的具体问题,该变量将依次column绑定到数组的每个元素。columns也就是说,在 的第一次迭代期间map(),它将是columns[0],在第二次迭代期间,columns[1]以此类推。

于 2013-03-16T12:09:53.103 回答