【问题标题】:Adding items to Json based on other data根据其他数据向 Json 添加项目
【发布时间】:2018-04-18 19:06:45
【问题描述】:

我有一些 JSON 数据需要为我正在做的 D3 堆叠条形图重新组织。本质上,我在 JSON 对象中有一个 ename 和 total 字段。我需要在我的所有 JSON 中获取每个唯一的名称,并使其成为每个对象的字段,该字段采用该节点的唯一名称和该名称的总数,并使其成为键/值对并将所有其他唯一名称设置为该节点为 0。

所以一个节点当前看起来像这样

{"id":"1", "month":"1", "total":"10", "year":"2012", "ename":"Jamie"}

在我重组后它看起来像这样

{"id":"1", "month":"1", "total":"10", "year":"2012", "ename":"Jamie", "Jamie":"10", "Joe": "0", "Jeri":"0", "Ann":"0", "Ron":"0","Tim":"0"}

我正在尝试根据在特定日期出现的每个人来堆叠我的条形图。

我有一些通过 JSON 获取唯一名称的代码。

data.forEach(function(element, i){
getNames(data);
})


function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

var uniq_enames = enames.filter( onlyUnique );

***This is where I am trying to add to my d****
data.forEach(function(d) {
 d.Date = new Date(d.year, d.month - 1);
  for(i=0; i < uniq_enames.length; i++){
    if(d.ename == uniq_enames[i]){
     var name = uniq_enames[i]


    }
  }
})

我卡住的地方是如何将该名称变量添加为我将使用 d.total 作为我的值的键?此外(我假设使用第二个内部循环)然后如何在我的 else 语句中对其他“名称”键执行相同的操作,将它们设置为总共 0?

我原来的小提琴为堆栈设置了 3 个类别的键,我试图将我的键设置为所有唯一名称(供参考,这里的数据是手工完成的,当我得到这个工作时它会来来自可以是任意数量的唯一名称的服务)

原始小提琴 - https://jsfiddle.net/jamiebrs/cuhqy8yj/

Fiddle 我正在尝试按名称堆叠 - https://jsfiddle.net/jamiebrs/6guh43yn/

【问题讨论】:

    标签: javascript json d3.js


    【解决方案1】:

    在我发布这篇文章后,我才弄清楚我想要做什么。

    这是我添加到循环中的方法。

    data.forEach(function(d) {
      d.Date = new Date(d.year, d.month - 1);
      for(i=0; i < uniq_enames.length; i++){
        if(d.ename == uniq_enames[i]){
         var name = uniq_enames[i]
         d[name] = d.total    
        } else{
         var name = uniq_enames[i]
         d[name] = "0"
        }
      }
    })
    

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2018-10-11
      相关资源
      最近更新 更多