原作者浅压缩 做一个不管任意层数组、对象包裹的键值对、两个基本类型的数组项都转化成一个对象包裹所有键值对的格式
var 输出示范 = {
foo: 'bar',
hi: 'bye',
hello: 'seeyou'
};
// 键值对版
var in1 = [[[{key: 'foo',value: 'bar'},{key: 'hi',value: 'bye'}],{a:{key: 'hello',value: 'seeyou'}}]]
function zipObj(originArr:any) {
let result:Record<string|number,any> = {}
if(typeof originArr === 'object'){
if(!(originArr instanceof Array)){
if(originArr.key){
result[originArr.key] = originArr.value
}else if(originArr === null){
}else{
for (var keys in originArr) {
(<any>Object).assign(result,zipObj(originArr[keys]))
}
}
}else if(originArr === null){
}else{
for (let item of originArr) {
(<any>Object).assign(result,zipObj(item))
}
}
}
return result
}
console.log('in1: ',zipObj(in1));//out
// =======================================================
// 数组项版
var in2 = [[[['foo', 'bar'],['hi', 'bye']],{data:['hello', 'seeyou']}],{trap:['kkk','aaa','ccc']}]
function zipArr(originArr:any) {
let result:Record<string|number,any> = {}
if(originArr instanceof Array){
if(originArr.length === 2 && typeof originArr[0] !== 'object' && typeof originArr[1] !== 'object'){
result[originArr[0]] = originArr[1]
}else{
for (let item of originArr) {
(<any>Object).assign(result,zipArr(item))
}
}
}else if(typeof originArr === 'object' && originArr !== null){
for (var keys in originArr) {
(<any>Object).assign(result,zipArr(originArr[keys]))
}
}
return result
}
console.log('in2: ',zipArr(in2));//out