使用JavaScript和/或D3.js在对象数组中获取给定键的所有值

Getting all the values for a given key, in an array of objects, using JavaScript and/or D3.js

本文关键字:获取 数组 JavaScript D3 对象 js 使用      更新时间:2023-09-26

我正在构建一个使用D3.js用于图表的仪表板。我有一个很大的对象数组。每个对象有32个具有相同键的键值对。有没有人知道一种获取给定键的所有值的好方法?

编辑:当我提出这个问题时,我想到了一个简单的函数。也认为可能已经存在一个函数,我没有找到。

function getValues(data, key){
  var values = [];
  data.forEach(function(d){
    var v = d[key];
    if(!d3.set(values).has(v)){
      values.push(v);
    }
  })
  return values;
}

如果你已经在使用d3,看看Mike Bostock的"Underscore Equivalents" gist: https://gist.github.com/mbostock/3934356

data.map(function(d) { return d[key]; });

将获得所有值。如果您只想要唯一的值,请使用

d3.set(data.map(function(d) { return d[key]; })).values());

我也必须使用D3创建许多仪表板。我经常使用的另一个选项是underscore.js。它节省了我的时间,并且根据我的需要帮助压缩代码。在下划线中有一个叫做'pluck'的函数,它做的正是你所要求的。对于一个对象数组,你可以声明一个键,它将返回所有的值。

的例子:

var data = [{name: 'dan', value: 40}, {name: 'ryan', value: 50}];
var getKeys = _.pluck(data, 'name');
=> ["dan", "ryan"]

http://underscorejs.org/摘下

使用d3.keys():

d3.keys(data).filter(function(key) { return key })

假设您指的是简单的原始值values -

你可以使用修改后的myne代码(最初是用来平化对象实际上) -来查找特定键(递归)的所有值:

示例:对于非常复杂的对象,让我们查找给定键"a"的所有值

var data ={a:5,g: [{"a":1,"b":[4,5,6,{a:55},[33, new Date()]]},{"c":2},{"a":3}]};
var g=[];
if (!Object.keys) { //not all browsers support it
    Object.keys = function (obj) {
        var keys = [],
            k;
        for (k in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, k)) {
                keys.push(k);
            }
        }
        return keys;
    };
}
function actualType(o)
{
  return Object.prototype.toString.apply(o);
}
var arr=actualType([]);
var obj=actualType({});
function work(a, val)
{
    if (actualType(a) == obj || actualType(a) == arr)
    {
        for (var j = 0; j < Object.keys(a).length; j++)
        {
            if (Object.keys(a)[j] == val) g.push(a[Object.keys(a)[j]]);
            else
                work(a[Object.keys(a)[j]], val);
        }
    }
}
work(data,'a') //'a' is the value we're searching
console.log(g) //[5, 1, 55, 3] 
http://jsbin.com/yofafove/1/edit