js三层数组用value找出对应的key

发布于 2022-09-12 13:26:40 字数 511 浏览 9 评论 0

怎么根据["110000", "110100", "110101"],找出对应的,北京,北京市,东城区

data = [
        {
            label:'北京',
            value:'110000',
            children:[{
                label:'北京市',
                value:'110100',
                children:[{
                     label:'东城区',
                     value:'110101'
                },{
                     label:'西城区',
                     value:'110102'
                }]
            }]
        }
        ...
        ...
        ...
    ]

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

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

发布评论

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

评论(4

肥爪爪 2022-09-19 13:26:40
var data = [
        {
            label:'北京',
            value:'110000',
            children:[{
                label:'北京市',
                value:'110100',
                children:[{
                     label:'东城区',
                     value:'110101'
                },{
                     label:'西城区',
                     value:'110102'
                }]
            }]
        }
    ]

var partIds = ["110000", "110100", "110101"]; 

function find(list, level, partLabels) {
    var node = list.find(({ value }) => partIds[level] === value);

    if(node) {
        partLabels[level] = node.label;        
    }

    return node && node.children 
        ? find(node.children, ++level, partLabels) 
        : partLabels;
}

var result = find(data, 0, []);
console.log(result); // ["北京", "北京市", "东城区"]
澜川若宁 2022-09-19 13:26:40

一般碰到这种需要迭代的,先从两层数据入手。 见答案

function findKey(data, result = []) {
  data.map(item => {
    item.children && findKey(item.children, result)
    return partIds.includes(item.value) && result.unshift(item.label)
  })
  return result
}

console.log(findKey(data)) // [ '北京', '北京市', '东城区' ]
冷夜 2022-09-19 13:26:40
const list = ["110000", "110100", "110101"]
function matchingTree(valueList,treeData){
  let level = -1
  const strList = []
  function _find(treeData){
    level += 1
    treeData.forEach(
      item=>{
        if(item.value === valueList[level]){
          strList.push(item.label)
          if(level < valueList.length - 1){
            _find(item.children)
          }else {
            console.log(strList)  //此处为结果
          }
        }
      }
    )
  }
  _find(treeData)
}
matchingTree(list, data)

还有些容错什么的没考虑
只考虑数据正确的情况
你可以自己考虑

人心善变 2022-09-19 13:26:40

我也来抖个机灵~~~
先将多维数组转换为一维数组,然后再遍历比对:

const data = [
    {
        label: '北京',
        value: '110000',
        children: [{
            label: '北京市',
            value: '110100',
            children: [{
                label: '东城区',
                value: '110101'
                }, {
                label: '西城区',
                value: '110102'
                }]
            }]
        }
    ]
    
const arr = data.reduce(function (pre, item) {
    const callee = arguments.callee
    pre.push(item)
    if (item.children && item.children.length > 0) item.children.reduce(callee, pre)
    return pre
}, []).map((item) => {
    item.children = []
    return item
})

let ids = ["110000", "110100", "110101"]

let labels = []
ids.map(id => {
    arr.filter(({
        value,
        label
    }) => {
        return value === id && labels.push(label)
    })
})
console.log(labels)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文