Javascript d3.keys()语法澄清?

Javascript d3.keys()语法澄清?,javascript,d3.js,Javascript,D3.js,大家好,刚刚开始学习JavaScript和d3.js 以下语法从名为“data”的关联数组中保存的每个对象创建一个新的属性名称数组 排除“数据”中第一个对象的属性名称 d3.keys(data[0]) .filter(function(key) { return key !== "date";})) 我不明白为什么下面的代码不能给出相同的结果 d3.keys(data) .filter(function(key) { return key !== "date";})) 为什么要告诉d

大家好,刚刚开始学习JavaScript和d3.js

以下语法从名为“data”的关联数组中保存的每个对象创建一个新的属性名称数组

排除“数据”中第一个对象的属性名称

d3.keys(data[0])
  .filter(function(key) { return key !== "date";}))
我不明白为什么下面的代码不能给出相同的结果

d3.keys(data)
  .filter(function(key) { return key !== "date";}))

为什么要告诉d3选择[0]索引位置,以及过滤对象属性名称。d3.keys(object)方法不是在关联数组中运行并返回一个新数组,该数组根据定义包含每个指定对象的属性名吗?这让我觉得你只需要过滤?

解释很简单:你不能将数组传递给d3.keys,它必须是一个对象。政府很清楚:

返回包含指定对象的属性名称的数组。(强调矿山)

如果您查看,您将看到
d3.keys
使用
for…in
循环:

export default function(map) {
    var keys = [];
    for (var key in map) keys.push(key);
    return keys;
};
这对数组不起作用。让我们看看:

功能键(地图){
var键=[];
对于(地图中的var键)键,按(键);
返回键;
}
var myArray=[{
x:“福”,
y:“酒吧”
}, {
x:“foobar”,
y:“barbaz”
}];

log(d3keys(myArray))
很多人都这么认为!我查看了MDN和d3源代码,但您确定了我缺少的内容——“数组索引只是具有整数名称的可枚举属性。”