怎么高效的去找层级深的JSON中名字相同的属性 ?

并且把对应的值全部放入一个数组中

阅读 2.9k
3 个回答

我的思路是利用扁平化的思想,将复杂的JSON结构扁平化后,就可以很方便的寻找到相同属性了,只需要一层遍历就好,利用对象检测值是否相同,所以难点在于如何将JSON扁平化,这里提供一种方法

var a = {
    name: 'dz',
    obj: {
        name: 'thx',
        obj: {
            age: 12,
            obj: {
                name: '3'
            }
        }
    },
    other: {
        name: 'thx',
        obj: {
            age: 12,
            obj: {
                name: '3'
            }
        }
    }
}

var objFlatten = function(obj) {
    return Object.keys(obj).reduce(function(a, b) {
        return a.concat(Object.prototype.toString.call(obj[b]) === '[object Object]' ? objFlatten(obj[b]): {[b]:obj[b]})
    }, [])
}
objFlatten(a)
// [{"name":"dz"},{"name":"thx"},{"age":12},{"name":"3"},{"name":"thx"},{"age":12},{"name":"3"}]
// 后续就可以随意处理了

看看 lodash 库中有没有相关的 API

用递归方法,然后比较,属性相同时,push到数组中。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题