请教关于数组遍历的一些问题 javascript

http404
  • 251
let data = ['testA-1','testA-2','testA-3','testB-1'];

//最后想要下面这种数据格式, 1、2、3 代表 测试1、测试2、测试3
[{
  value:'testA',
  label:'testA',
  children: [
    {
        value:'1',
        label:'测试1',
    },{
        value:'2',
        label:'测试2',
    },{
        value:'3',
        label:'测试3',
    },
  ]
},{
  value:'testB',
  label:'testB',
  children: [
    {
        value:'1',
        label:'测试2',
    }
  ]}
]
回复
阅读 306
3 个回答
✓ 已被采纳

image

// => 结果
demo(['testA-1','testA-2','testA-3','testB-1'])

function demo (list) {
  let collection = {}, spName, res = [];
  list.forEach(name => {
    spName = name.split('-')
    collection[spName[0]] = collection[spName[0]] || []
    collection[spName[0]].push(spName[1])
  })
  for(let key in collection) {
    res.push({
      value: key,
      label: key,
      childre: collection[key].map(val => ({ value: val, label: `测试${val}` }))
    })
  }
  return res;
}
Object.values(data.reduce((result, item) => {
    let [label, value] = item.split('-');
    if (!result[label]) {
        result[label] = {
            value: label,
            label: label,
            children: []
        }
    }
    result[label].children.push({
        value:value,
        label: '测试' + value
    })
    return result;
}, {}));

我来用 Lodash 写一个

import _ from "lodash";

let data = ['testA-1', 'testA-2', 'testA-3', 'testB-1'];

function tranform(dataList) {
    return _(dataList)
        .map(s => s.split("-"))
        .groupBy(([key]) => key)
        .entries()
        .map(([key, nums]) => ({
            value: key,
            label: key,
            children: nums.map(([, value]) => ({ value, label: `测试${value}` }))
        }))
        .value();
}

console.log(JSON.stringify(tranform(data), null, 2));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏