web-dev-qa-db-fra.com

Convertir des valeurs de tableau en clés d'objet

Je fais un get qui me renvoie un objet json comme ceci:

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

et je voudrais finir avec:

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

Je veux donc ignorer le premier tableau à l'intérieur du tableau "data", utiliser les valeurs du deuxième tableau comme clés (et remplacer les chaînes vides par quelque chose de plus utile) et les valeurs dans tous les tableaux restants comme valeurs dans l'objet résultant.

C'est donc tout à fait le problème des parties multiples, bien que j'en soupçonne un assez simple. Quelle est la façon la plus simple de le faire - et si elle est différente, quelle est la façon la plus simple de le faire en termes de traitement/chargement de page?

Merci d'avance,

7
protoskull

Vous pouvez prendre le deuxième tableau comme clés pour les objets souhaités et itérer uniquement la partie après les clés. Ensuite, parcourez les clés et créez un nouvel objet pour les valeurs du tableau. Renvoie l'objet pour le mappage d'un nouveau tableau.

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; }
1
Nina Scholz

Vous pouvez parcourir votre tableau tout en ajoutant votre index et votre valeur dans un objet ...

Vous pouvez trouver un exemple sur la façon dont vous pouvez itérer des objets et des tableaux ici et un exemple ici

Généralement, pour ajouter un élément à un objet

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

Voici ma solution, en espérant qu'elle soit utile à vous et à toute personne qui a le même confondu avec ce problème!

  1. vous devez construire un objet significatif!
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"
    }


*/
2
user8202629