首页 > 解决方案 > D3.js 中的数组查找

问题描述

在 D3.js(或一般的 JavaScript)中,如果你有一个像

var out = [
    {name:"John", car:"bmw", colour:"blue"},
    {name:"Joe", car:"ford", colour:"red"},
    {name:"Anna", car:"honda", colour:"green"},
    {name:"Mary", car:"bmw", colour:"red"},
];

请问我怎样才能得到car和/或colour给定的名字?名称可以被认为是唯一的,并且数组不一定必须是数组,即 dict 也应该没问题

谢谢

标签: javascriptd3.js

解决方案


试试 d3.map,它会在给定键的数据数组中返回一个项目。它的创建如下:

 d3.map(array, function(d) { return d.key; });

然后,您可以通过以下方式访问地图中的项目:

 map.get("value");

或者检查是否存在这样的值:

 map.has("value");

有关更多信息,请参阅文档

这是您的数据集的示例:

var out = [
    {name:"John", car:"bmw", colour:"blue"},
    {name:"Joe", car:"ford", colour:"red"},
    {name:"Anna", car:"honda", colour:"green"},
    {name:"Mary", car:"bmw", colour:"red"},
];


var map = d3.map(out, function(d) { return d.name; });

// Get items by key:
console.log(map.get("John").car);
console.log(map.get("Anna").colour);

// Check to see if an item exists:
console.log(map.has("Joe"));

// Create a new value and access:
map.set("Ralph", {name: "Ralph",car:"bmw",colour:"red"})
console.log(map.get("Ralph"));
<script src="https://d3js.org/d3.v4.min.js"></script>

当然,您不需要为此使用 d3,常规 ES6 映射(或无数其他选项)可以同样轻松地工作:

var out = [
    {name:"John", car:"bmw", colour:"blue"},
    {name:"Joe", car:"ford", colour:"red"},
    {name:"Anna", car:"honda", colour:"green"},
    {name:"Mary", car:"bmw", colour:"red"},
];

var map = new Map(out.map(function(d) {
  return [d.name,d];
}));

console.log(map.get("John"));


推荐阅读