Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
D3.js 将对象的某些属性绑定到数据_D3.js - Fatal编程技术网

D3.js 将对象的某些属性绑定到数据

D3.js 将对象的某些属性绑定到数据,d3.js,D3.js,我有一个对象形式的数据,我试图将对象的一些属性作为数据绑定到我的选择中 对象的外观如下所示: var data = {'attr1': 100, 'attr2': "foo", 'attr3': 200, ... 'attr20': 34} 我将感兴趣的属性名称存储在数组中: keys = ['attr1', 'attr3', 'attr20'] 我想绑定这些值(10020034)。我正在做以下工

我有一个对象形式的数据,我试图将对象的一些属性作为数据绑定到我的选择中

对象的外观如下所示:

var data = {'attr1': 100,
            'attr2': "foo",
            'attr3': 200,
            ...
            'attr20': 34}
我将感兴趣的属性名称存储在数组中:

keys = ['attr1', 'attr3', 'attr20']
我想绑定这些值(10020034)。我正在做以下工作:

var selection = d3.select('ul')
                  .selectAll('li')
                  .data(keys, function(key){ return data[key]})
                  .enter()
                  .append('li')
                  .text(function(d){return d})
我得到的不是“100”、“200”和“34”作为文本输出,而是“attr1”、“attr2”和“attr3”。我希望key函数返回
数据的值,但它只返回键

当我知道这些键时,有没有关于如何仅绑定
数据
对象的某些属性的建议


我知道我的用法有点“倒退”。。。我在这里制作了一个jsfiddle来显示输出:

在设置数据之前,您需要过滤并更改数据

在d3中,当您将函数作为第二个参数传递时,调用它的方式如下:

for (i = -1; ++i < m;) {
  keyValue = key.call(groupData, nodeData = groupData[i], i);
  if (node = nodeByKeyValue.get(keyValue)) {
    updateNodes[i] = node;
    node.__data__ = nodeData;
  } else if (!dataByKeyValue.has(keyValue)) { // no duplicate data key
    enterNodes[i] = d3_selection_dataNode(nodeData);
  }
  dataByKeyValue.set(keyValue, nodeData);
  nodeByKeyValue.remove(keyValue);
}
然后您可以将
过滤后的
传递到
.data

keys = ['attr1', 'attr3', 'attr20'];
filtered = [];
for (var i = 0, l = keys.length; i < l; ++i) {
    filtered.push(data[keys[i]]);
}