Convert array values to object keys

旧巷老猫 提交于 2019-12-22 04:27:06

问题


I do a get which returns me a json object like so:

        "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 ...]

and I would like to end up with:

[{"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...

So I want to ignore the first array inside the "data" array, use the values of the second array as keys (and replace the empty strings with something more useful) and the values in all remaining arrays as values in the resulting object.

So it is quite the multipart problem, though I suspect a fairly simple one. What is the simplest way to do that - and if different, what is the leanest way to do it in terms of processing/page load?

Thanks in advance,


回答1:


You could take the second array as keys for the wanted objects and iterate only the part after the keys. Then iterate the keys and build a new object for the values of the array. Return the object for mapping for a new array.

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }



回答2:


You can iterate over your array while adding your index and value into an object...

You can find an example on how you can iterate objects and arrays here and an example here

Generally, to add an item to object

var array = [{"Location":"Sometown"}, {"Location2":"Sometown2"},    {"Location3":"Sometown3"}],
object = {};
array.forEach(function(element, index) {
    object[index] = element;
});
console.log(object);



回答3:


Here is my solution, hoping it is useful to you & anybody who has the same confused with this problem!

  1. you should construct a meaningful object!

const meaningful_objs = {
    "Location": "",
    "Passes": "",
    "Passes%": "",
    "No ID": "",
    "No ID%": "", 
    "Fails": "",
    "Fails%": "",
    "Fail Dangerous": "",
    "Fail Dangerous%": "",
    "Total": ""
};

// or get it from you data[1], 
// but I think it has some errors of you got returned data!
// It should be have all keys!

// just make a assume, you get the right data[1]!

const data[1] = ["Location", "Passes", "Passes%", "No ID", "No ID%", "Fails", "Fails%", "Fail Dangerous", "Fail Dangerous%", "Total"]; 

let keys = data[1];

/*

Array to Object

*/




// ["Location", "Passes", "Passes%", "No ID", "No ID%", "Fails", "Fails%", "Fail Dangerous", "Fail Dangerous%", "Total"]

const keys_array = [
    "Location",
    "Passes",
    "Passes%",
    "No ID",
    "No ID%", 
    "Fails",
    "Fails%",
    "Fail Dangerous",
    "Fail Dangerous%",
    "Total"
];

let temp_obj = {};

keys_array.map(
    (value, index) => {
        temp_obj[`${value}`] = "";
        // temp_obj[value] = "";
        return temp_obj;
    }
);

console.log(`temp_obj = `, temp_obj);
// {"Location": "","Passes": "","Passes%": "","No ID": "","No ID%": "", "Fails": "","Fails%": "","Fail Dangerous": "","Fail Dangerous%": "","Total": ""};



for(let k in temp_obj) {
    console.log(`typeof (k) = `, typeof (k));
    // typeof (k) = string
}




/*

Object to Array

*/


const meaningful_objs = {
    "Location": "",
    "Passes": "",
    "Passes%": "",
    "No ID": "",
    "No ID%": "", 
    "Fails": "",
    "Fails%": "",
    "Fail Dangerous": "",
    "Fail Dangerous%": "",
    "Total": ""
};

// {"Location": "","Passes": "","Passes%": "","No ID": "","No ID%": "", "Fails": "","Fails%": "","Fail Dangerous": "","Fail Dangerous%": "","Total": ""};




let keys_array = Object.keys(meaningful_objs);

console.log(`keys_array = \n`, keys_array);

// ["Location", "Passes", "Passes%", "No ID", "No ID%", "Fails", "Fails%", "Fail Dangerous", "Fail Dangerous%", "Total"]






/*

result 

*/



let keys = keys_array;
// ["Location", "Passes", "Passes%", "No ID", "No ID%", "Fails", "Fails%", "Fail Dangerous", "Fail Dangerous%", "Total"]


let arrays = [
    [
        "Sometown",
        "8,25",
        "53.40%",
        "140",
        "0.90%",
        "7,17",
        "45.40%",
        "48",
        "0.30%",
        "16,30"
    ],
    [
        "Some Other Town",
        "12,78",
        "44.80%",
        "193",
        "0.70%",
        "15,22",
        "54.10%",
        "103",
        "0.40%",
        "28,96"
    ]
];

let result = arrays.map(
    (array) => {
        let temp = {};
        keys.forEach(
            (key, index) => {
                console.log(`key = `, key);
                console.log(`index = `, index);
                temp[`${key}`] = array[index];
            }
        );
        console.log(`temp = `, temp);
        return temp;
    }
);
console.log(`result = `, result);



/*

test

*/


let string_objs = JSON.stringify(result);

// "[{"Location":"Sometown","Passes":"8,25","Passes%":"53.40%","No ID":"140","No ID%":"0.90%","Fails":"7,17","Fails%":"45.40%","Fail Dangerous":"48","Fail Dangerous%":"0.30%","Total":"16,30"},{"Location":"Some Other Town","Passes":"12,78","Passes%":"44.80%","No ID":"193","No ID%":"0.70%","Fails":"15,22","Fails%":"54.10%","Fail Dangerous":"103","Fail Dangerous%":"0.40%","Total":"28,96"}]"


let string_obj1 = JSON.stringify(result[0]);

// "{"Location":"Sometown","Passes":"8,25","Passes%":"53.40%","No ID":"140","No ID%":"0.90%","Fails":"7,17","Fails%":"45.40%","Fail Dangerous":"48","Fail Dangerous%":"0.30%","Total":"16,30"}"


/*


    {
        "Location":"Sometown",
        "Passes":"8,25",
        "Passes%":"53.40%",
        "No ID":"140",
        "No ID%":"0.90%",
        "Fails":"7,17",
        "Fails%":"45.40%",
        "Fail Dangerous":"48",
        "Fail Dangerous%":"0.30%",
        "Total":"16,30"
    }

*/


let string_obj2 = JSON.stringify(result[1]);


// "{"Location":"Some Other Town","Passes":"12,78","Passes%":"44.80%","No ID":"193","No ID%":"0.70%","Fails":"15,22","Fails%":"54.10%","Fail Dangerous":"103","Fail Dangerous%":"0.40%","Total":"28,96"}"


/*

    {
        "Location":"Some Other Town",
        "Passes":"12,78",
        "Passes%":"44.80%",
        "No ID":"193",
        "No ID%":"0.70%",
        "Fails":"15,22",
        "Fails%":"54.10%",
        "Fail Dangerous":"103",
        "Fail Dangerous%":"0.40%",
        "Total":"28,96"
    }


*/


来源:https://stackoverflow.com/questions/43137010/convert-array-values-to-object-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!