Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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 d3过滤器从csv复制名称_Javascript_Csv_D3.js - Fatal编程技术网

Javascript d3过滤器从csv复制名称

Javascript d3过滤器从csv复制名称,javascript,csv,d3.js,Javascript,Csv,D3.js,使用d3.csv我正在读取一个csv,然后将其存储为 console.log(数据[0])返回 对象{用户名:“标记”,y:0,x:0,值:0} 现在我只想从数据中提取每个用户名的第一次出现。 在python中,我会使用data.drop_duplicates(columns='username') 编辑: 考虑下面的例子: var X = [{username: "a", y: 0, x: 0, value: 0}, {username: "b", y: 0, x: 0, val

使用
d3.csv
我正在读取一个csv,然后将其存储为
console.log(数据[0])
返回
对象{用户名:“标记”,y:0,x:0,值:0
}

现在我只想从
数据中提取每个用户名的第一次出现。
在python中,我会使用
data.drop_duplicates(columns='username')

编辑: 考虑下面的例子:

  var X =  [{username: "a", y: 0, x: 0, value: 0},
    {username: "b", y: 0, x: 0, value: 0},
    {username: "a", y: 1, x: 0, value: 0}
    {username: "c", y: 0, x: 0, value: 0}
    {username: "b", y: 1, x: 0, value: 0}]
它应该只返回:

  var Y =   [{username: "a", y: 0, x: 0, value: 0},
    {username: "b", y: 0, x: 0, value: 0},
    {username: "c", y: 0, x: 0, value: 0}

i、 e.
f(X)=Y

因为您希望找到每个用户名的第一个匹配项,所以这个问题与D3无关,可以用普通JavaScript解决

有几种方法可以做到这一点。一个简单的方法是使用:

find()方法返回数组中满足提供的测试函数的第一个元素的值。(强调矿山)

这是一个演示。首先,我们以数组的形式获取用户名的唯一值:

var users = [...new Set(data.map(function(d) {
    return d.username
}))];
然后,我们使用
映射
过滤器
来获得第一次出现:

var firstOccurrence = users.map(function(d) {
    return data.find(function(e) {
        return e.username === d
    })
});
查看演示:

var数据=[{
用户名:“a”,
y:0,
x:0,,
数值:0
}, {
用户名:“b”,
y:0,
x:0,,
数值:0
}, {
用户名:“a”,
y:1,,
x:0,,
数值:0
}, {
用户名:“c”,
y:0,
x:0,,
数值:0
}, {
用户名:“b”,
y:1,,
x:0,,
数值:0
}];
var users=[…新集合(data.map)(函数(d){
返回d.username
}))]
var firstOccurrence=users.map(函数(d){
返回数据。查找(函数(e){
返回e.username==d
})
});
log(firstOccurrence)
您可以使用一个控制台来跟踪已处理的用户名。使用
用户名
作为键可确保此值的唯一性。要获取此值的第一次出现而不是最后一次出现,还必须使用检查是否已添加每个特定值

var X=[
{用户名:“a”,y:0,x:0,值:0},
{用户名:“b”,y:0,x:0,值:0},
{用户名:“a”,y:1,x:0,值:0},
{用户名:“c”,y:0,x:0,值:0},
{用户名:“b”,y:1,x:0,值:0}
];
var uniqX=新映射();//构造唯一用户名映射
X.forEach(X=>{
如果(!uniqX.has(x.username))uniqX.set(x.username,x);//仅添加,如果不存在
});
变量Y=uniqX.values();//检索结果集

console.log(…Y)是否要筛选重复项或查找每个用户名的第一个匹配项?它们是不同的东西。每个用户名的第一次出现。谢谢,但我不确定这是我想要的。我需要每个usename的第一个匹配项。不仅是马克。如果是那样的话,请用更好的措辞重写你的问题。我添加了一个example@Donbeo我编辑了答案,看看这是否是你想要的。PS:
find
在IE上不起作用。