二维数组和json对象的转换

image.png
1. 二维数组 -> json对象

思路:

  1. 吧二维数组除第一个元素和其他元素分开;
  2. 从第二个元素开始遍历二维数组;
    3.遍历时第一个对象,对象的key为二维数组第一个元素的值,value为遍历元素对应的值



方法1:

var source = [
['ID', 'name', 'size', 'parentID'],
['0', '工厂', 13, ''],
['1', '分销站A', 13, '0'],
['2', '分销站B', 13, '0']
];

formatJson(source);

function formatJson(source){
  
  var json = source.slice(1).map(vals => {

      console.log("vals: ", vals)

      var obj = {};
      vals.forEach((val, index) => {
          obj[source[0][index]] = val
      })
      return obj;
  });
  
  return json
  
}


这里的source.slice(1)取到的就是二维数组第一个数组以为的元素,可用console.log("vals: ", vals)打印出来看看。

方法2:

var source = [
    ['ID', 'name', 'size', 'parentID'],
    ['0', '工厂', 13, ''],
    ['1', '分销站A', 13, '0'],
    ['2', '分销站B', 13, '0']
];
convert(source)
 
function formatJson(ary) {

    var result = [];
    var keys = ary[0];

    for (var i = 1; i < ary.length; i++) {

        var obj = {};
        var vals = ary[i];
        for (var j = 0; j < vals.length; j++) {
            obj[keys[j]] = vals[j];
        }
        result.push(obj);
    }

    return result;
}

方法3:

var source = [
    ['ID', 'name', 'size', 'parentID'],
    ['0', '工厂', 13, ''],
    ['1', '分销站A', 13, '0'],
    ['2', '分销站B', 13, '0']
];

var result = source.slice(1).map(vals => vals.reduce((obj, val) => Object.assign(obj, {[source[0][vals.indexOf(val)]]: val}), {})); 

console.log(result)

换行后好理解些:

var result = source.slice(1).map(vals => {
    return vals.reduce((obj, val) => {
        return Object.assign(obj, {[source[0][vals.indexOf(val)]]: val})
        // return Object.assign(obj, {[source[0][i]]: val})
    }, {})
})



2. json数组 -> 二维数组
var json = [
    {ID: "0", name: "工厂", size: 13, parentID: ""},
    {ID: "1", name: "分销站A", size: 13, parentID: "0"},
    {ID: "2", name: "分销站B", size: 13, parentID: "0"}
];

formatDoubleDimensional(json);

function formatDoubleDimensional(arr){
  for (var i=0; i<arr.length; i++) {
      var tmpArr = []
      for (var attr in arr[i]) {
          tmpArr.push(arr[i][attr])
      }
      arr[i] = tmpArr
  }
  return arr
};

或者用reduce方法:

json.reduce((total,item,index) => {
    var values = []
    for(let key in item) {
        values.push(item[key])
    }
    total.push(values)
    return total
},[])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容