Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
简洁的javascript获取特定键的所有唯一值_Javascript_Arrays_D3.js_Underscore.js - Fatal编程技术网

简洁的javascript获取特定键的所有唯一值

简洁的javascript获取特定键的所有唯一值,javascript,arrays,d3.js,underscore.js,Javascript,Arrays,D3.js,Underscore.js,我有一个javascript数组,我想获得特定键的所有唯一值。我使用下划线实现了它,如下所示: var v = { "b" : 2 }; var w = { "a" : 4, "b" : 2 }; var x = { "a" : 1, "b" : 2 }; var y = { "a" : 4, "b" : 2, "c" : 3 }; var z = { "a" : null, "b" : 2, "c" : 3 }; var data = [v,w,x,y,z]; // this is the

我有一个javascript数组,我想获得特定键的所有唯一值。我使用下划线实现了它,如下所示:

var v = { "b" : 2 };
var w = { "a" : 4, "b" : 2 };
var x = { "a" : 1, "b" : 2 };
var y = { "a" : 4, "b" : 2, "c" : 3 };
var z = { "a" : null, "b" : 2, "c" : 3 };
var data = [v,w,x,y,z];

// this is the part I'd like to make more concise
var keys = _.map(data,function(d) { return d.a; });
keys = _.unique(keys);
keys = _.reject(keys, function(k) { return _.isUndefined(k) || _.isNull(k)});


似乎应该有一个更紧凑的方法来实现这一点,但我不太清楚是否有。我也不需要在这里使用下划线。我正在使用d3,但也无法找到在d3中执行此操作的更简单方法。

您可以使用此方法来简化。另外,可以通过使用或来缩短
拒绝
的时间


若您同意将属性转换为字符串,那个么可以使用d3.set。如果没有下划线,正确检查null和undefined有点麻烦,创建自己的函数来执行此操作可能会有意义:

keys = d3.set(
    data.map(function(d){ return d.a; })
        .filter(function(d){  return (typeof d !== "undefined") ? d !== null : false })
    ).values();
仅使用vanilla javascript稍微长一点,但不会强制转换为字符串:

keys = data.map(function(d){ return d.a; })
     .reduce(function(p, v){ return p.indexOf(v) == -1 ? p.concat(v) : p; }, [])
     .filter(function(d){  return (typeof d !== "undefined") ? d !== null : false });
正如Bergi指出的,还可以使用使下划线代码更简洁


为了进行更多的下划线/javascript/d3比较,Mike Bostock在几周前用它们之间的等价物更新了a。我还有一些,但它们开始变得相当棘手/难以理解

你能过滤真实值吗

_.uniq(data.map(d => d.a).filter(d => d))

一个小小的改进是使用pulk:
.pulk(数据,'a')
感谢您帮助我压缩此文件
_.uniq(data.map(d => d.a).filter(d => d))