前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS题目之数组数据拆分重组转成嵌套对象,让脑细胞活跃下

JS题目之数组数据拆分重组转成嵌套对象,让脑细胞活跃下

作者头像
CRPER
发布2019-01-28 10:12:26
1.7K0
发布2019-01-28 10:12:26
举报
文章被收录于专栏:CRPER折腾记

前言

下班的时候在群里看到一个小伙伴,在群里问了一道js的题,发现没人理会他;

来了兴趣就折腾了下,以下是解答过程,用的是ES6+的特性,在chrome跑的;

有兴趣的小伙伴可以瞧瞧~~谢谢


题目

效果图


解答

尽量注释,我分步骤解答

1:数组变形

格式:先拿到数据格式如下;

代码语言:javascript
复制
[ [ 'code', 'Zh' ],
  [ 'code', 'Cn' ],
  [ 'taobao', '.cn' ],
  [ 'taobao', '.com' ] ]
复制代码

实现

这一步是拆开数据拿到我们想要的,比如基于大写字母,基于域名后缀;

因为数据格式是死的,所以正则也相对较为简单

代码语言:javascript
复制
let arr = ['codeZh', 'codeCn', 'taobao.cn', 'taobao.com'];
let arrSplit = arr.map(item => {
  if (item.indexOf('.')!== -1){
    return item.replace(/(\.)/g, ",$1").split(',')
  } else {
    return item.replace(/([A-Z])+/g, ",$1").split(',')
  }
})


console.log(arrSplit);

复制代码

2:输出构建对象数据

格式:先拿到数据格式如下;

代码语言:javascript
复制
[ { code: { Zh: 'codeZh' } },
  { code: { Cn: 'codeCn' } },
  { taobao: { '.cn': 'taobao.cn' } },
  { taobao: { '.com': 'taobao.com' } } ]

复制代码

实现

代码语言:javascript
复制
let arrGroup = arrSplit.map(item => {
  return {[item[0]]:{[item[1]]:item.join('')}}
})
console.log(arrGroup);
复制代码

3: 实现符合的JSON

格式 : 先拿到数据格式如下;

代码语言:javascript
复制
{
   "code": {
      "Zh": "codeZh",
      "Cn": "codeCn"
   },
   "taobao": {
      ".cn": "taobao.cn",
      ".com": "taobao.com"
   }
}
复制代码

实现

代码语言:javascript
复制
let resultObj = {};
for (let i = 0; i < arrGroup.length; i++){
  for (const [key, value] of Object.entries(arrGroup[i])) {
    resultObj[key] = {
      ...resultObj[key],
      ...value
    }
  }
}


console.log(resultObj);
复制代码

完整代码

代码语言:javascript
复制
// 求数组转换成jso
//['codeZh', 'codeCn', 'taobao.cn', 'taobao.com'] 
// 输出
/*
{ 
  'code':{Zh:'codeZh',Cn:'codeCn'},
  'taobao':{'.cn':'taobao.cn},'.com':'taobao.com'
}
*/

const resultObj = {};
let arr = ['codeZh', 'codeCn', 'taobao.cn', 'taobao.com'];

let arrSplit = arr.map(item => (item.indexOf('.') !== -1 ? item.replace(/(\.)/g, ",$1").split(',') : item.replace(/([A-Z])+/g, ",$1").split(',')))

let arrGroup = arrSplit.map(item => ({ [item[0]]: { [item[1]]: item.join('') } }))

for (let i = 0; i < arrGroup.length; i++){
  for (const [key, value] of Object.entries(arrGroup[i])) {
    resultObj[key] = {
      ...resultObj[key],
      ...value
    }
  }
}

console.log(arrSplit);
console.log(arrGroup);
console.log(resultObj);

复制代码

总结

这个只是其中的一个解决姿势,肯定还有其他更优的法子;

仅供参考,不对之处请留言,会及时修正...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 题目
      • 解答
        • 1:数组变形
        • 2:输出构建对象数据
        • 3: 实现符合的JSON
        • 完整代码
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档