Javascript 如何使用旧阵列中的数据创建新阵列?

Javascript 如何使用旧阵列中的数据创建新阵列?,javascript,arrays,d3.js,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

我想知道,是否可以从给定的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];
下面的数组包含另外两个对象,例如:

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];
第一个和最后一个对象的值分别等于所有值1和值2的总和。所有其他对象的值=值2和值1之间的差值

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

我需要它作为我在微策略中使用的d3瀑布图。因此,我不必对js代码做太多更改,只需添加一个代码来创建一个新的数组,就可以使用其中的数据构建可视化

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

id,value1,value2
name1,5,13
name2,2,5
name3,4,6
name4,3,7
据我所知,函数d3.csv读取csv格式的数据就像读取json数据一样,将标题(第一行)作为4个对象的属性(在本例中),其中接下来的每一行包含每个对象的属性值

我使用以下代码调用dataset函数:

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;
}});
d3.csv(“data0.csv”),函数(错误,数据){
var values=d3.keys(数据[0]).filter(函数(键){returnkey!==“id”});
data.forEach(函数(d){
对于(变量i=0;i
考虑到财产名称也可能不同(而不是“value1”和“value2”),我如何引用所有value1和value2,并找到每一个总和。我是否应使用I和j作为循环

任何帮助都将不胜感激!

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}];
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 = [];
var sum1 = 0;
var sum2 = 0; 
for (i = 0; i < data0.length; i++) {
  sum1 += data0[i].value1;
  sum2 += data0[i].value2;
  var diff = data0[i].value2 - data0[i].value1;
  data.push({id: 'name' + (i+1) + '_', value: diff});
}
data.unshift({id: 'sum1', value: sum1});
data.push({id: 'sum2', value: sum2});
var数据=[]; var-sum1=0; var-sum2=0; 对于(i=0;i
Array.push()在数组的最后一项之后,即在第一项之前添加Array.unshift()。

data0=[{id:name1,value1:5,value2:13},{id:name2,value1:2,value2:5},{id:name3,value1:4,value2:7}];
var数据=[];
var-sum1=0;
var-sum2=0;
对于(i=0;i
Array.push()在数组的最后一项之后添加,Array.unshift()在第一项之前添加。

基本上您可以执行此任务

var 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 sum1=0,
sum2=0,
r=array.map(函数(a){
sum1+=a.value1;
sum2+=a.value2;
返回{id:'.'+a.id,值:a.value2-a.value1};
});
返回[{id:'sum1',值:sum1}].concat(r,{id:'sum2',值:sum2});
}(数据0);
document.write(''+JSON.stringify(result,0,4)+'');
基本上你可以完成这个任务

var 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 sum1=0,
sum2=0,
r=array.map(函数(a){
sum1+=a.value1;
sum2+=a.value2;
返回{id:'.'+a.id,值:a.value2-a.value1};
});
返回[{id:'sum1',值:sum1}].concat(r,{id:'sum2',值:sum2});
}(数据0);

document.write(“”+JSON.stringify(result,0,4)+“”);
不确定您的id是什么,因为看起来您在使用变量。在本例中,我将它们转换为字符串。祝您愉快

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

var数据=[
{
id:'name1',
价值1:5,
价值2:13
}, 
{
id:'name2',
价值1:2,
价值2:5
}, 
{
id:'name3',
价值1:4,
价值2:6
}, 
{
id:'name4',
价值1:3,
价值2:7
} 
];
//算数
var值1sum=0;
var值2sum=0;
data.forEach(函数(对象){
value1Sum+=object.value1;
value2Sum+=object.value2;
});
//在前面和后面插入总和
data.unshift({
id:'sum1',
值:value1Sum
});
数据推送({
id:'sum2',
值:value2Sum
});
//计算差异
data=data.map(函数(对象,idx){
if(idx==0 | | idx==data.length-1){
返回对象;
}
返回{
id:object.id+'''.'',
值:object.value2-object.value1
};

});
不确定您的id是什么,因为看起来您使用的是变量。在本例中,我将它们转换为字符串。祝您愉快

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

var数据=[
{
id:'name1',
价值1:5,
价值2:13
}, 
{
id:'name2',
价值1:2,
价值2:5
}, 
{
id:'name3',
价值1:4,
价值2:6
}, 
{
id:'name4',
价值1:3,
价值2:7
} 
];
//算数
var值1sum=0;
var值2sum=0;
data.forEach(函数(对象){
value1Sum+=object.value1;
value2Sum+=object.value2;
});
//在前面和后面插入总和
data.unshift({
id:'sum1',
值:value1Sum
});
数据推送({
id:'sum2',
值:value2Sum
});
//计算差异
data=data.map(函数(对象,i