简体   繁体   English

将数组值转换为对象键

[英]Convert array values to object keys

I do a get which returns me a json object like so: 我做一个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 ...]

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. 所以我想忽略“data”数组中的第一个数组,使用第二个数组的值作为键(并用更有用的东西替换空字符串),并将所有剩余数组中的值作为结果对象中的值。

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, 提前致谢,

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);

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" } */ 

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; } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM