简体   繁体   English

JavaScript-连接数组

[英]javascript - join arrays

i dont know how to improve my following code - it seems a litte bit ugly: 我不知道如何改善我的以下代码-似乎有点丑陋:

my data is like: 我的数据像:

date d1 d2 d3 d4 d5 d6 
110522 5 1 3 5 0 7 
110523 9 2 4 6 5 9 
110524 0 0 0 0 1 0 
110525 0 0 3 0 4 0 
...

I read in data from a text-file with d3.js and want to generate an "complete" array with following structure: 我使用d3.js从文本文件读取数据,并希望生成具有以下结构的“完整”数组:

Array [ Array[10], Array[10], Array[10], Array[10], Array[10] ]
// 10 f.e. is the number of data rows in file

var final1=[];
var final2=[];
var final3=[];
var complete=[];

var dsv = d3.dsv(" ", "text/plain");
dsv("/data/file.txt", function(error, data) {
  data.forEach(function(d) {
    final1.push({x: d.date, y: d.d1});
    final2.push({x: d.date, y: d.d2});
    final3.push({x: d.date, y: d.d3});
    ...
    complete.push(final1);
    complete.push(final2);
    complete.push(final3);
    ...
 });

That code works! 该代码有效! But it's very laborious. 但这非常费力。 How can i combine the arrays in an overall array, without the detour of generating a lots of help arrays (final1, final2, ...)? 我如何才能在不产生大量帮助数组(final1,final2,...)的情况下绕线而将数组组合成一个整体数组?

So end up in an array as follows: 因此,最终出现在数组中,如下所示:

var complete=   [
[{'x':110522,'y':5},{'x':110523,'y':9},{'x':110524,'y':0}, ...],
[{'x':110522,'y':1},{'x':110523,'y':2},{'x':110524,'y':0}, ...],
...
];

Use a for...in loop to iterate over each of the properties dynamically instead of explicitly handling each one. 使用for ... in循环动态遍历每个属性,而不是显式处理每个属性。

 var data = [ { date: 110522, d1: 5, d2: 1, d3: 3, d4: 5, d5: 0, d6: 7 }, { date: 110523, d1: 9, d2: 2, d3: 4, d4: 6, d5: 5, d6: 9 }, { date: 110524, d1: 0, d2: 0, d3: 0, d4: 0, d5: 1, d6: 0 }, { date: 110525, d1: 0, d2: 0, d3: 3, d4: 0, d5: 4, d6: 0 } ]; var results = []; data.forEach(function (d) { var prop; var resultIndex = 0; for (prop in d) { if (d.hasOwnProperty(prop) && prop !== 'date') { if (!results[resultIndex]) { results[resultIndex] = []; } results[resultIndex].push({ 'x': d.date, 'y': d[prop] }); resultIndex++; } } }); //Output for demonstration purposes var element = document.createElement('pre'); element.innerHTML = JSON.stringify(results, null, 4); document.body.appendChild(element); 

Your code could be more like: 您的代码可能更像:

var complete = [[],[],[]];
var dsv = d3.dsv(' ', 'text/plain');
dsv('/data/file.txt', function(error, data){
  for(var i=0,l=data.length; i<l; i++){
    var d = data[i];
    for(var n=0,q=complete.length; n<q; n++){
      complete[n].push({x:d.date, y:d['d'+(n+1)]});
    }
  }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM