Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
const entries = [{
  "province":"浙江",
  "city":"杭州",
  "name":"西湖"
}, {
  "province":"四川",
  "city":"成都",
  "name":"锦里"
}, {
  "province":"四川",
  "city":"成都",
  "name":"方所"
}, {
  "province":"四川",
  "city":"阿坝",
  "name":"九寨沟"
}];
const level = ["province","city","name"];
const result = [
  {
   "value":"浙江",
   "children": [
      {
       "value":"杭州",
       "children": [
          {
           "value":"西湖"
          }
        ]
      }
    ]
  },
  {
   "value":"四川",
   "children": [
      {
       "value":"成都",
       "children": [
          {
           "value":"锦里"
          },
          {
           "value":"方所"
          }
        ]
      },
      {
       "value":"阿坝",
       "children": [
          {
           "value":"九寨沟"
          }
        ]
      }
    ]
  }
]
const transformTree = (entries, level) => {
  const resultArr = [...new Set(entries.map(item => item.province))].map(name => {
    return ({ value: name, children: []})
  })
  for (let item of resultArr) {
    const citiesSet = [...new Set(entries.filter(e => e.province === item.value).map(v => v.city))]
    for (let s of citiesSet) {
      let values = [...new Set(entries.filter(e => e.city === s).map(m => m.name))].map(name => ({ value: name }))
      item.children.push({ value: s, children: values })
    }
  }
  return resultArr
}
const values = transformTree(entries, level)
console.log('values: ', JSON.stringify(values, null, 2));
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers