![](/img/trans.png)
[英]Reversing the Data Array in D3.js Given a JavaScript Object with Key, Val Pair
[英]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"]
使用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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.