【问题标题】:Make this array to comma seprated object using loop using javascript使用 javascript 使用循环将此数组设为逗号分隔的对象
【发布时间】:2018-06-13 14:22:43
【问题描述】:

var data = [
  ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
  ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
  ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
  ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
  ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
  ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
  ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
  ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
  ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
];

我有上面的数组,我想要类似 {

  "0": {
    "Postcode": "CF",
    "Detached Avg": "93177",
    "Detached Sales": "280",
    "Semi-detached Avg": "56037",
    "Semi-detached Sales": "179",
    "Terraced Avg": "49039",
    "Terraced Sales": "147",
    "Flat Avg": "48792",
    "Flat Sales": "140",
    "Overall Avg": "67238",
    "Total Sales": "746",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "1": {
    "Postcode": "CH",
    "Detached Avg": "86963",
    "Detached Sales": "11",
    "Semi-detached Avg": "48811",
    "Semi-detached Sales": "9",
    "Terraced Avg": "40850",
    "Terraced Sales": "2",
    "Flat Avg": "41500",
    "Flat Sales": "2",
    "Overall Avg": "65025",
    "Total Sales": "24",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "2": {
    "Postcode": "HR",
    "Detached Avg": "0",
    "Semi-detached Avg": "0",
    "Detached Sales": "0",
    "Semi-detached Sales": "0",
    "Terraced Avg": "71500",
    "Terraced Sales": "1",
    "Flat Avg": "0",
    "Flat Sales": "0",
    "Overall Avg": "71500",
    "Total Sales": "1",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "3": {
    "Postcode": "LD",
    "Detached Avg": "70927",
    "Detached Sales": "33",
    "Semi-detached Avg": "53489",
    "Semi-detached Sales": "10",
    "Terraced Avg": "0",
    "Terraced Sales": "0",
    "Flat Avg": "0",
    "Flat Sales": "0",
    "Overall Avg": "66872",
    "Total Sales": "43",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "4": {
    "Postcode": "LL",
    "Detached Avg": "72727",
    "Detached Sales": "144",
    "Semi-detached Avg": "50913",
    "Semi-detached Sales": "59",
    "Terraced Avg": "47330",
    "Terraced Sales": "30",
    "Flat Avg": "42193",
    "Flat Sales": "21",
    "Overall Avg": "62136",
    "Total Sales": "254",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "5": {
    "Postcode": "NP",
    "Detached Avg": "87351",
    "Detached Sales": "243",
    "Semi-detached Avg": "50333",
    "Semi-detached Sales": "120",
    "Terraced Avg": "38132",
    "Terraced Sales": "68",
    "Flat Avg": "26833",
    "Flat Sales": "6",
    "Overall Avg": "68696",
    "Total Sales": "437",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "6": {
    "Postcode": "SA",
    "Detached Avg": "84966",
    "Detached Sales": "168",
    "Semi-detached Avg": "50014",
    "Semi-detached Sales": "120",
    "Terraced Avg": "42617",
    "Terraced Sales": "66",
    "Flat Avg": "72081",
    "Flat Sales": "30",
    "Overall Avg": "65758",
    "Total Sales": "384",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  },
  "7": {
    "Postcode": "SY",
    "Detached Avg": "62147",
    "Detached Sales": "61",
    "Semi-detached Avg": "49425",
    "Semi-detached Sales": "37",
    "Terraced Avg": "39044",
    "Terraced Sales": "37",
    "Flat Avg": "60587",
    "Flat Sales": "12",
    "Overall Avg": "53002",
    "Total Sales": "147",
    "Type": "New",
    "Period": "1995",
    "Region": "WALES"
  }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请访问help center 了解内容和How to Ask。提示:发布努力和代码。
  • 我不会打扰“0”:{}、“1”:{}。只需创建一个 [{},{}] 的对象数组,因为它会自动可索引为 objectarray[0] 等
  • 我不知道怎么做,你能帮帮我吗?

标签: javascript node.js


【解决方案1】:

我不会为“0”:{}、“1”:{}而烦恼。只需创建一个 [{},{}] 的对象数组,因为它会自动可索引为 objectarray[0] 等

var data = [
  ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
  ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
  ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
  ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
  ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
  ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
  ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
  ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
  ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
];

var keys = data[0], newArr=[];
for (var i=1;i<data.length;i++) {
  var obj = {};
  for (var j=0;j<keys.length;j++) {
    obj[keys[j]]=data[i][j];
  }
  newArr.push(obj); 
   // or if you insist make newArr a {} and do newArr[""+(i-1)]=obj;
}
console.log(newArr);

【讨论】:

    【解决方案2】:

    您可以复制第一个元素并将其存储在变量中。使用slice 从元素1 浅拷贝数组。使用map 循环遍历数组。使用reduceObject.assign 制作对象。

    var data = [
      ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
      ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
      ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
      ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
      ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
      ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
      ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
      ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
      ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
    ];
    
    
    var header = data[0];
    var result = data.slice(1).map(o => o.reduce((c, v, i) =>Object.assign(c, {[header[i]]: v}), {}));
    
    console.log(result);

    【讨论】:

    • 是的。我明白了,我看到很多答案都在使用循环,所以我添加了另一个选项:)
    【解决方案3】:

    您可以使用Array.shift 来获取包含keys.forEach 的第一项以循环遍历其余部分并对其进行转换:

    var data = [
      ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
      ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
      ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
      ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
      ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
      ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
      ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
      ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
      ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
    ]
    
    var keys = data.shift()
    var result = []
    
    data.forEach(e => {
      var tmp = {}
      e.forEach((x, i) => tmp[keys[i]] = x)
      result.push(tmp)
    })
    
    console.log(result)

    或递归函数:

    var data = [
      ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
      ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
      ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
      ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
      ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
      ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
      ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
      ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
      ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
    ]
    
    var keys = data.shift()
    var result = []
    
    function transform(arr) {
      var curr = arr.shift()
      var tmp = {}
    
      if (!tmp || !curr) return
    
      curr.forEach((x, i) => tmp[keys[i]] = x)
      
      result.push(tmp)
      transform(arr)
    }
    
    transform(data)
    
    console.log(result)

    【讨论】:

      【解决方案4】:

      你可以做这样的事情。

      zipObj 采用两个数组,一个带有属性名称,第二个带有实际值,并将它们压缩到一个新对象中。

      var data = [
        ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
        ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
        ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
        ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
        ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
        ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
        ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
        ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
        ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
      ];
      
      const zipObj = (arr1, arr2, obj) => {
        if (arr1.length === 0 || arr2.length === 0) { return; }
        obj[arr1[0]] = arr2[0];
        return zipObj(arr1.slice(1), arr2.slice(1), obj);
      }
      
      const res = [];
      
      for (let i = 1; i < data.length; i++) {
        let obj = {};
        zipObj(data[0], data[i], obj);
        res.push(obj);
      }
      
      console.log(res);

      【讨论】:

      • 这看起来太复杂了——尤其是对于菜鸟
      • @mplungjan 取决于,对我来说zip 比嵌套循环清晰得多。
      • 我真的必须反复阅读你的“zip”——这对初学者来说是零意义
      【解决方案5】:

      试试这个代码:

      var data = [
          ["Postcode", "Detached", "Sales", "Semi-det", "Sales", "Terraced", "Sales", "Flat/mais", "Sales", "Overall average", "Total sales", "Type", "Period", "Region"],
          ["CF", "93177", "280", "56037", "179", "49039", "147", "48792", "140", "67238", "746", "New", "1995", "WALES"],
          ["CH", "86963", "11", "48811", "9", "40850", "2", "41500", "2", "65025", "24", "New", "1995", "WALES"],
          ["HR", "0", "0", "0", "0", "71500", "1", "0", "0", "71500", "1", "New", "1995", "WALES"],
          ["LD", "70927", "33", "53489", "10", "0", "0", "0", "0", "66872", "43", "New", "1995", "WALES"],
          ["LL", "72727", "144", "50913", "59", "47330", "30", "42193", "21", "62136", "254", "New", "1995", "WALES"],
          ["NP", "87351", "243", "50333", "120", "38132", "68", "26833", "6", "68696", "437", "New", "1995", "WALES"],
          ["SA", "84966", "168", "50014", "120", "42617", "66", "72081", "30", "65758", "384", "New", "1995", "WALES"],
          ["SY", "62147", "61", "49425", "37", "39044", "37", "60587", "12", "53002", "147", "New", "1995", "WALES"]
      ];
      // create array key: "Postcode", "Detached", "Sales"...
      var dataKey = data[0];
      // remove first item
      data.splice(0, 1);
      // create array output
      var dataOut = [];
      // loop data
      data.forEach(function(item) {
          // create obj json
          var jsonVariable = {};
          // loop array key
          dataKey.forEach(function(key, index) {
              // set key - value
              jsonVariable[key] = item[index];
          });
          // add obj json to array output
          dataOut.push(jsonVariable);
      });
      console.log('dataOut', dataOut);
      

      【讨论】:

        【解决方案6】:

        听起来很简单:

        my_object = {};
        for (var i=0; i < data.length; i++){
          if (i == 0){// this is our keys
            var my_keys = data[i];
          } else {
            my_object[i] = {};
            for (var j=0; j < data[i].length; j++){
              my_object[i][my_keys[j]] = data[i][j];
            }
          }
        }
        

        没有测试代码,但你明白了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-23
          • 2020-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多