繁体   English   中英

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

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

我正在构建一个使用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”要点: 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/#pluck

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM