IT源码网

javascript之连接数组

exmyth 2025年05月04日 程序员 88 0

我不知道如何改进我的以下代码 - 它看起来有点难看:

我的数据是这样的:

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  
... 

我使用 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); 
    ... 
 }); 

该代码有效!但非常费力。如何将数组组合成一个整体数组,而不需要绕道生成大量帮助数组(final1、final2、...)?

因此最终形成一个数组,如下所示:

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}, ...], 
... 
]; 

请您参考如下方法:

使用 for...in loop动态迭代每个属性,而不是显式处理每个属性。

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);


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!