js 数组操作的问题

发布于 2022-09-12 13:15:43 字数 552 浏览 9 评论 0

后端给我的数据是这样的:

let obj = [
    {
        areaName:"华南地区",
        cityName:"深圳"
    },
    {
        areaName:"华南地区",
        cityName:"广州"
    },
    {
        areaName:"华南地区",
        cityName:"海口"
    },
    {
        areaName:"华北地区",
        cityName:"黑龙江"
    }
];

我该怎么处理才能变成下面这种格式?

{
 areaName:"华南地区",
 children:[
    {
        cityName:"深圳"
    },
    {
        cityName:"广州"
    },
    {
        cityName:"海口"
    }]
},
{
areaName:"华北地区",
children:[
    {
        cityName:"黑龙江"
    }]
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

孤云独去闲 2022-09-19 13:15:43
var obj = [
    {
        areaName:"华南地区",
        cityName:"深圳"
    },
    {
        areaName:"华南地区",
        cityName:"广州"
    },
    {
        areaName:"华南地区",
        cityName:"海口"
    },
    {
        areaName:"华北地区",
        cityName:"黑龙江"
    }
];
var areaNameArray = [];
obj.forEach(item=>{
    if(!areaNameArray.includes(item.areaName)) {
        areaNameArray.push(item.areaName)
    }
});
var result = areaNameArray.map(areaName=>{
    const children = obj.filter(item=>item.areaName === areaName).map(item=>({areaName:item.areaName}))
    return {
        areaName,
        children
    }
})
鲜肉鲜肉永远不皱 2022-09-19 13:15:43
function getTree(arr) {
  return arr.reduce((accumulator, currentValue) => {
    let temp = { areaName: '', children: [] }
    const sameIdx = accumulator.findIndex(x => x.areaName === currentValue.areaName)

    if (sameIdx >= 0) {
      accumulator[sameIdx].children.push({
        cityName: currentValue.cityName
      })
      return accumulator
    } else {
      temp.areaName = currentValue.areaName
      temp.children.push({
        cityName: currentValue.cityName
      })
      accumulator.push(temp)
      return accumulator
    }
  }, [])
}
浮萍、无处依 2022-09-19 13:15:43
function processData(source) {
    const areaNameCash = [];
    const target = [];

    source.map(item => {
      const { areaName, cityName } = item;
      if (areaNameCash.includes(areaName)) {
        const _t = target.filter(item => item.areaName === areaName)[0];
        _t.children.push({ cityName });
      } else {
        areaNameCash.push(areaName);
        target.push({ areaName, children: [{ cityName }] });
      }
    });
    return target;
}

方法里面应该加空数组的处理。

落墨 2022-09-19 13:15:43
let areaNameArr = [];
let result = [];
obj.forEach((item) => {
  if(areaNameArr.indexOf(item.areaName) == -1){
    areaNameArr.push(item.areaName) && result.push({areaName: item.areaName,children:[{cityName:item.cityName}]})
  } else{
    result.some((objItem) => {objItem.areaName == item.areaName && objItem.children.push({cityName:item.cityName})})
  }
})
console.log(result)
情未る 2022-09-19 13:15:43
用js玩数组处理不用链式操作是没有灵魂的?
var arr = [
    {
        areaName:"华南地区",
        cityName:"深圳"
    },
    {
        areaName:"华南地区",
        cityName:"广州"
    },
    {
        areaName:"华南地区",
        cityName:"海口"
    },
    {
        areaName:"华北地区",
        cityName:"黑龙江"
    }
];
var res = [...new Set(arr.map(({ areaName}) => areaName))].map(areaName => ({
  areaName,
  children: arr.filter(item => item.areaName === areaName).map(({
    cityName
  }) => cityName)
}));
console.log(res)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文