javascript - 如何使用旧数组中的数据创建一个新数组?

标签 javascript arrays d3.js

我想知道是否可以从给定的 json 数据创建,例如:

data0 = [ {id: name1, value1: 5, value2: 13}, {id: name2, value1: 2, value2: 5}, {id: name3, value1: 4, value2: 6}, {id: name4, value1: 3, value2: 7} ];

例如以下数组,还有两个对象:

var data = [ {id: sum1, value: 14}, {id: name1_, value: 8}, {id: name2_, value: 3 }, {id: name3_, value: 2}, {id: name4_, value: 4} {id: sum2, value: 31];

第一个和最后一个对象的值分别等于所有 value1 和 value2 的总和。所有其他对象都有一个 value = value2 和 value1 之间的差值。

根据报告的类型,data0 可以具有不同的对象属性值。

我在 Microstrategy 中使用的 d3 瀑布图需要它。因此,我不必对 js 代码进行太多更改,而只需添加代码来创建新数组,然后将使用其中的数据构建可视化。

我拥有的 csv 格式的初始数据:

id,value1,value2
name1,5,13
name2,2,5
name3,4,6
name4,3,7

据我了解,函数 d3.csv 像 json 数据一样读取 csv 格式的数据,将标题(第一行)作为 4 个对象(在本例中)的属性,其中接下来的每一行都包含值每个对象的属性。

我使用以下代码调用数据集函数:

d3.csv("data0.csv", function(error, data) {
var values = d3.keys(data[0]).filter(function(key) {return key !== "id";});

data.forEach(function(d) {
for (var i = 0; i < values.length; i++) {
d.value = +d[values[i]];
return d;
}});

考虑到属性名称也可能不同(不是“value1”和“value2”),我该如何引用所有 value1 和 value2,并找到每个总和。我应该使用 i 和 j 的 for 循环吗?

任何帮助将不胜感激!

最佳答案

不确定您的 id 是什么,因为您似乎正在使用变量。在本例中我将它们转换为字符串。享受吧!

代码本来可以很紧凑,但我认为这会让你将来更容易阅读。请随时提出任何进一步的问题,很乐意为您提供帮助!

var data = [ 
  {
    id: 'name1', 
    value1: 5, 
    value2: 13
  }, 
  {
    id: 'name2', 
    value1: 2, 
    value2: 5
  }, 
  {
   id: 'name3', 
   value1: 4, 
   value2: 6
  }, 
  {
    id: 'name4', 
    value1: 3, 
    value2: 7
  } 
];

// Calculate sums
var value1Sum = 0;
var value2Sum = 0;

data.forEach(function(object) {
  value1Sum += object.value1;
  value2Sum += object.value2;
});

// Insert sums at front and back
data.unshift({
  id: 'sum1',
  value: value1Sum
});

data.push({
  id: 'sum2',
  value: value2Sum
});

// Calculate differences
data = data.map(function(object, idx) {
  if (idx === 0 || idx === data.length - 1) {
    return object;
  }
  
  return {
    id: object.id + '_',
    value: object.value2 - object.value1
  };
});

关于javascript - 如何使用旧数组中的数据创建一个新数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36178803/

相关文章:

javascript - 切换滚动条可见性不适用于 Safari(适用于 Chrome)

javascript - 无法更新数组 aws Dynamo

php - 如何在 PHP 中反转多维数组

javascript - 同时移动所有节点(包括链接)?

javascript - D3 – 比较并传递多个数据集中的对象值

javascript - 用户的文本输入 - 移动前缀应限制输入的数字数量。

javascript - 在 Chrome 中替换 element.setCapture?

php - (bool)true var 在数组赋值时不会转换为数组,但 (bool)false 会。为什么?

javascript - 如何使用 SAPUI5 将数组加载到片段内的下拉列表中?

firefox - SVG 文本元素文本 anchor ="middle"在 Firefox 中不起作用