Javascript 为什么这段代码可以计算列表中的一项而不能计算其他项?

Javascript 为什么这段代码可以计算列表中的一项而不能计算其他项?,javascript,function,d3.js,dc.js,Javascript,Function,D3.js,Dc.js,我正在使用尝试计数.csv文件中“Manager”的“MIT”和“Instore”的数量。我的代码可以用来查找所有的“经理”,但不能用于其他两个 我尝试将函数拆分为3个单独的函数,因为我认为问题可能是在一个函数中使用了多个dc.numberDisplay,但这不起作用。我已经尝试过这个功能,所以只有一个,如果它在寻找管理者,它是有效的,麻省理工学院的,它没有,相反,它没有。我试着改变了代码的顺序,但还是一无所获。我将console.log(p.mit_count)放在add_item、remov

我正在使用尝试计数.csv文件中“Manager”的“MIT”和“Instore”的数量。我的代码可以用来查找所有的“经理”,但不能用于其他两个

我尝试将函数拆分为3个单独的函数,因为我认为问题可能是在一个函数中使用了多个dc.numberDisplay,但这不起作用。我已经尝试过这个功能,所以只有一个,如果它在寻找管理者,它是有效的,麻省理工学院的,它没有,相反,它没有。我试着改变了代码的顺序,但还是一无所获。我将console.log(p.mit_count)放在add_item、remove_item和initialise的每一行中。我已将console.log(d.value.mit\u count)放在valueAccessor中

Scott,Instore,3,BMC,96
Mark,Instore,4,Intro,94
Wendy,Instore,3,Intro,76
Lucas,Instore,2,Intro,96

console.log(p.mit\u count)
显示它计数为13(正如我所期望的那样),但是在
valueAccessor中
console.log(d.value.mit\u count)
显示0。我不明白为什么这对“经理”有效,除了别的什么都没有。这花了我一个多星期的时间,我几乎感到尴尬。这看起来很简单

我想如果你记录
staffCounter.all()
你会发现它是在3个单独的箱子中计算经理、MIT和Instore。这是因为您的维度是按
Rank
排序的,然后您的组又按
Rank
进行装箱,因此您最终得到的是每列一个箱子

通常情况下,您需要将带有一个箱子的a传递给数字显示。但是,它是允许的,并且也将接受具有多个BIN()的普通组。它将对垃圾箱进行分类,然后取最后一个

为什么??我不确定。我认为,在几乎所有情况下,您都会希望减少到一个箱子,但显然有人有一个用例,他们希望在许多箱子中显示最大的价值

我惊讶地发现这种行为没有被记录下来,所以我更新了

使用
groupAll
时,您的代码将类似于:

var staffCounter = ndx.groupAll().reduce(add_item, remove_item, initialise);
dc.numberDisplay("#managerCount")
    .formatNumber(d3.format(".0"))
    .valueAccessor(function(d) {
        return d.manager_count; // no .value here
    })
    .group(staffCounter);

请注意,此处未使用交叉筛选维度。

当您更改
dc.numberDisplay
s的顺序以使mitCount为第一个时会发生什么情况,例如?结果保持不变。您就像一个小小的守护天使。那很好用。我真的很感谢你的帮助。你已经为我和我以前的问题解决了这个问题。非常感谢你。
var staffCounter = ndx.groupAll().reduce(add_item, remove_item, initialise);
dc.numberDisplay("#managerCount")
    .formatNumber(d3.format(".0"))
    .valueAccessor(function(d) {
        return d.manager_count; // no .value here
    })
    .group(staffCounter);