将具有重复值的字符串数组转换为基于索引的对象数组

sai*_*tam 0 javascript arrays json javascript-objects

假设我有一个这样的列表结构:

[
    "id1", "01-01-2019", "name1", "€ 5,60",
    "id2", "02-01-2019", "name2", "€ 5,70",
    "id3", "03-01-2019", "name3", "€ 5,20",
    ...
]
Run Code Online (Sandbox Code Playgroud)

我想将它转换为具有json对象的列表,如下所示:

[
    {
        "id": "id1", 
        "date": "01-01-2019", 
        "name": "name1", 
        "value": "€ 5,60"
    },
    {
        "id": "id2", 
        "date": "02-01-2019", 
        "name": "name2", 
        "value": "€ 5,70"
    },
    {
        "id": "id3", 
        "date": "03-01-2019", 
        "name": "name3", 
        "value": "€ 5,20"
    },
    ...
]
Run Code Online (Sandbox Code Playgroud)

在JavaScript中执行此任务的最有效方法是什么?

T.J*_*der 5

我使用一个while带有前端断言的简单循环:

console.assert(data.length % 4 === 0); // Or whatever you use for assertions
const result = [];
let i = 0;
while (i < data.length) {
    result.push({
        id: data[i++],
        date: data[i++],
        name: data[i++],
        value: data[i++]
    });
}
Run Code Online (Sandbox Code Playgroud)

实例:

const data = [
    "id1", "01-01-2019", "name1", "€ 5,60",
    "id2", "02-01-2019", "name2", "€ 5,70",
    "id3", "03-01-2019", "name3", "€ 5,20"
];

console.assert(data.length % 4 === 0);
const result = [];
let i = 0;
while (i < data.length) {
    result.push({
        id: data[i++],
        date: data[i++],
        name: data[i++],
        value: data[i++]
    });
}

console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)