The World of Remnant

TS任务zipmap

原作者浅压缩 做一个不管任意层数组、对象包裹的键值对、两个基本类型的数组项都转化成一个对象包裹所有键值对的格式


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