[英]Issue while converting array from one format to another
我有以下輸入數組(這是一個Javascript Object []數組響應):
[
{index:1, headerCSV:"Name", dataFields: ["Name", "Id"]},
{index:2, headerCSV:"Id", dataFields: ["Test", "Test 1"]},
{index:3, headerCSV:"fname", dataFields: ["Test", "Test 1"]},
{index:4, headerCSV:"lname", dataFields: []},
]
我正在嘗試將其轉換為以下數組:
[
{"header" : 1, "field" :"Name"},
{"header" : 1, "field" :"Id"},
{"header" : 2, "field" :"Test"},
{"header" : 2, "field" :"Test 1"},
{"header" : 3, "field" :"Test"},
{"header" : 3, "field" :"Test 1"}
]
在結果數組中,我將需要在header
中輸入輸入數組的index
,在field
我需要使用輸入數組的dataFields
數組的數組進行構造。 我嘗試使用以下代碼:
var CSVHeadersAndFields = /* The input array */;
var headerFieldMappingJSON = [];
for(var i=0; i<CSVHeadersAndFields.length;i++) {
headerFieldMappingJSON[i] = {};
var selectedFields = CSVHeadersAndFields[i].dataFields;
for(var j=0; j<selectedFields.length;j++) {
headerFieldMappingJSON[i].header = CSVHeadersAndFields[i].index;
headerFieldMappingJSON[i].field = selectedFields[j];
}
}
但是我得到了以下結果:
[
{"header":1,"field":"Name"},
{"header":2,"field":"Test"},
{"header":3,"field":"Test"},
{}
]
我懷疑表單for循環的第一個迭代值被第二個迭代替換,並且我還需要避免從輸入數組的空dataFields
數組構造輸出數組映射。
如何制作正確的算法來轉換數組?
為結果數組創建一個單獨的迭代器索引。 或者只是推送到結果數組,而不是按索引添加值:
var CSVHeadersAndFields = /* The array from question */;
var headerFieldMappingJSON = [];
for(var i = 0; i < CSVHeadersAndFields.length; i++) {
var selectedFields = CSVHeadersAndFields[i].dataFields;
for(var j = 0; j < selectedFields.length; j++) {
headerFieldMappingJSON.push({
header: CSVHeadersAndFields[i].index,
field: selectedFields[j]
});
}
}
相同的示例,但更干凈:
var input = /* The array from question */;
var output = [];
input.forEach(function (csvRow) {
csvRow.dataFields.forEach(function (field) {
output.push({
header: csvRow.index,
field: field
});
});
});
下面的代碼將為每個dataField
提供一個結果對象,並將CSVHeadersAndFields
的index
屬性用作它們的header
屬性。
const result = CSVHeadersAndFields.map(item => item.dataFields.map(field => { return { header: item.index, field } }) );
您可以嘗試以下方法:
obj.dataFields
並為每個字段創建對象。 var data = [ {index:1, headerCSV:"Name", dataFields: ["Name", "Id"] }, {index:2, headerCSV:"Id", dataFields: ["Test", "Test 1"] }, {index:3, headerCSV:"fname", dataFields: ["Test", "Test 1"] }, {index:4, headerCSV:"lname", dataFields: []} ]; var output = data.reduce((acc, obj) => { const header = obj.index; return acc.concat( obj.dataFields.map((field) => ({ header, field}) )) }, []); console.log(output)
這是更簡單的代碼:
var CSVHeadersAndFields = [ {index:1, headerCSV:"Name", dataFields: ["Name","Id"]},
{index:2, headerCSV:"Id", dataFields:["Test","Test 1"]},{index:3, headerCSV:"fname", dataFields:["Test","Test 1"]}, {index:4, headerCSV:"lname", dataFields:[]};
var headerFieldMappingJSON = [];
for(var CSVHeadersAndField of CSVHeadersAndFields ) {
for(var dataFieldVal of CSVHeadersAndField['dataFields']){
headerFieldMappingJSON.push({'header': CSVHeadersAndField['index'], 'field': dataFieldVal })
}
}
輸出:
[
{
"header": 1,
"field": "Name"
},
{
"header": 1,
"field": "Id"
},
{
"header": 2,
"field": "Test"
},
{
"header": 2,
"field": "Test 1"
},
{
"header": 3,
"field": "Test"
},
{
"header": 3,
"field": "Test 1"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.