将数组值转换为对象键

pro*_*ull 8 javascript arrays object javascript-objects

我执行get命令,返回一个json对象,如下所示:

        "data": [
[
"2016 Pass/Fail Rates by Test Centre",
"",
"",
"",
"",
"",
"",
"",
"",
""
],
[
"",
"Passes",
"",
"No ID",
"",
"Fails",
"",
"Fail Dangerous",
"",
"Total"
],
[
"Sometown",
"8,725",
"53.40%",
"140",
"0.90%",
"7,417",
"45.40%",
"48",
"0.30%",
"16,330"
],
[
"Some Other Town",
"12,778",
"44.80%",
"193",
"0.70%",
"15,422",
"54.10%",
"103",
"0.40%",
"28,496"
],
[... many more identically formatted arrays ...]
Run Code Online (Sandbox Code Playgroud)

最后,我想得出:

[{"Location":"Sometown", "Passes":8,725, "Pass%":53.40%, "No ID":140, "NoID%":0.90%, "Fails":7,417, "Fail%":45.40%, "Fail Dangerous":48, "FailDangerous%":0.30%, "Total":16,330}, {"Location":"Some Other Town", "Passes":8,725, etc etc...
Run Code Online (Sandbox Code Playgroud)

因此,我想忽略“数据”数组中的第一个数组,将第二个数组的值用作键(并将空字符串替换为更有用的东西),并将所有其余数组中的值用作结果对象中的值。

所以这是一个多方面的问题,尽管我怀疑这是一个相当简单的问题。最简单的方法是什么-如果有所不同,就处理/页面加载而言,最简单的方法是什么?

提前致谢,

Nin*_*olz 1

您可以将第二个数组作为所需对象的键,并仅迭代键后面的部分。然后迭代键并为数组的值构建一个新对象。返回用于映射新数组的对象。

var data = { data: [["2016 Pass/Fail Rates by Test Centre", "", "", "", "", "", "", "", "", ""], ["Location", "Passes", "Passes%", "No ID", "No ID%", "Fails", "Fails%", "Fail Dangerous", "Fail Dangerous%", "Total"], ["Sometown", "8,725", "53.40%", "140", "0.90%", "7,417", "45.40%", "48", "0.30%", "16,330"], ["Some Other Town", "12,778", "44.80%", "193", "0.70%", "15,422", "54.10%", "103", "0.40%", "28,496"]] },
    keys = data.data[1],
    result = data.data.slice(2).map(function (a) {
        var temp = {};
        keys.forEach(function (k, i) {
            temp[k] = a[i];
        })
        return temp;
    });
    
console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)