image.png
1. 二维数组 -> json对象
思路:
- 吧二维数组除第一个元素和其他元素分开;
- 从第二个元素开始遍历二维数组;
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
},[])