2014-10-27 90 views
0

我有问题将数组转换为另一个数组。当我尝试推入新数组时,它只是添加第二个索引。推到数组刚刚读取第二个索引在Javascript中

这里是我的数组:

var emailAddr = [ 
    { 
     customerID : "C20121121221327_249", 
     email : "[email protected]", 
     files : [ 
      "201409011141106_082895250262", 
      "201410011171208_082895250262" 
     ] 
    }, 
    { 
     customerID : "C20121121221327_300", 
     email : "[email protected]", 
     files : [ 
      "201409011141106_xxx", 
     ] 
    } 
]; 

这里我的代码来创建新的数组:

var penampungan = []; 
for (var i = 0; i < emailAddr.length; i++) { 
    var data = { 
     customerID : emailAddr[i].customerID, 
     email : emailAddr[i].email 
    }; 

    for (var j = 0; j < emailAddr[i].files.length; j++) {   
     data['master'] = emailAddr[i].files[j] + ".pdf"; 
     data['detail'] = emailAddr[i].files[j] + "_detail.pdf"; 

     penampungan.push(data); 
    } 
} 

console.log(penampungan); 

我预期的结果是这样的:

var newArray = [ 
    { 
     customerID : "C20121121221327_249", 
     email : "[email protected]", 
     master : "201409011141106_082895250262.pdf", 
     detail : "201409011141106_082895250262_detail.pdf" 
    }, 
    { 
     customerID : "C20121121221327_249", 
     email : "[email protected]", 
     master : "201410011171208_082895250262.pdf", 
     detail : "201410011171208_082895250262_detail.pdf" 
    }, 
    { 
     customerID : "C20121121221327_300", 
     email : "[email protected]", 
     master : "201409011141106_xxx.pdf", 
     detail : "201409011141106_xxx_detail.pdf" 
    } 
]; 

如何创建?

谢谢。

+0

为什么你需要展开你的文件字段? – 2014-10-27 13:06:37

回答

2

您需要创建data移动到内环

var penampungan = []; 
for (var i = 0; i < emailAddr.length; i++) {  
    for (var j = 0; j < emailAddr[i].files.length; j++) { 
     var data = { 
      customerID : emailAddr[i].customerID, 
      email : emailAddr[i].email 
     };   
     data['master'] = emailAddr[i].files[j] + ".pdf"; 
     data['detail'] = emailAddr[i].files[j] + "_detail.pdf"; 

     penampungan.push(data); 
    } 
} 
+0

哇,它现在可行! :D非常感谢。 – fanjavaid 2014-10-27 13:05:02

+0

非常小,但是你当然可以把它全部保持一致,并且在'data = {}'中设置'master'和'detail' – Rhumborl 2014-10-27 13:16:16

0

像这样:

var penampungan = []; 
for (var i = 0; i < emailAddr.length; i++) { 
    for (var j = 0; j < emailAddr[i].files.length; j++) { 
     var data = {}; 
     data.customerID = emailAddr[i].customerID, 
     data.email = emailAddr[i].email 
     data.master = emailAddr[i].files[j] + ".pdf"; 
     data.detail= emailAddr[i].files[j] + "_detail.pdf"; 
     penampungan.push(data); 
    } 
} 
console.log(penampungan); 
0

首先,为什么不创建一个类?它会为您的数组的每个元素组织数据,并减少需要分析的代码量。我建议是这样的:

function Info (customerID, email, files) { 
    this.customerID = customerID; 
    this.email = email; 
    this.files = files; 
    this.penampungan = function() { 
     var newObjects = new Array (files.length); 
     for (var i = 0; i < files.length; i++) { 
      newObjects [i] = { 
       customerID : this.customerID, 
       email : this.email, 
       master : files [i] + ".pdf", 
       detail : files [i] + "_detail.pdf", 
      }; 
     } 
    return newObjects; 
    } 
} 

现在做一个for语句,它接受一个信息阵列和penampungan对象加载到一个新的数组。

相关问题