javascript - 将数组从一种格式转换为另一种格式时出现问题

标签 javascript arrays algorithm

我有以下输入数组(这是一个 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"}
]

在结果数组中,我需要将输入数组 index 放入 header 中,在 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
        });
    });
});

关于javascript - 将数组从一种格式转换为另一种格式时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998705/

相关文章:

javascript - 当 li 上的类不存在时禁用按钮

c - 时分秒针之间的角度

algorithm - 奶油沼泽拼图中的小 Sprite

XML 差异算法

javascript - React - 无法呈现状态值

javascript - 如何使用外部 src 压缩图像?

Javascript 查询修复

c - 在C中将一行文本分成两个数组

PHP 简单 CSS 字符串解析器

PHP,如何从数组中回显特定对象数据?