【问题标题】:Convert array values to object keys将数组值转换为对象键
【发布时间】:2017-08-25 12:12:39
【问题描述】:

我做了一个 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...]

我想最终得到:

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

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

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

提前致谢,

【问题讨论】:

    标签: javascript arrays object javascript-objects


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

    【讨论】:

    • @Nina-Scholz,好主意,非常感谢! https://stackoverflow.com/questions/45678565/how-to-map-many-arrays-values-that-have-same-construct-to-an-object
    【解决方案2】:

    您可以在将索引和值添加到对象中时遍历数组...

    您可以找到一个关于如何迭代对象和数组的示例here 和一个示例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】:

      这是我的解决方案,希望对您和任何对此问题有同样困惑的人有用!

      1. 你应该构造一个有意义的对象!

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 2018-05-10
      • 2015-04-28
      • 2019-09-13
      相关资源
      最近更新 更多