关于js对象的处理的问题?

像如下这样一个json对象,如何判断这几个属性值是否'相同'?

// 不同
{
    "name1": {
        "value": "1",
        "operate": 2
    },
    "name2": {
        "value": "10",
        "operate": 3
    },
    "name3": {
        "value": "10",
        "operate": 2
    }
}
//相同
{
    "name1": {
        "value": "100",
        "operate": 2
    },
    "name2": {
        "value": "100",
        "operate": 2
    },
    "name3": {
        "value": "100",
        "operate": 2
    }
}
阅读 1.6k
2 个回答
function isSomeValue(data) {
    return Object.keys(data).reduce((res,k) => res.add(JSON.stringify(data[k])), new Set).size !== Object.keys(data).length
}
isSomeValue(//相同
{
    "name1": {
        "value": "100",
        "operate": 2
    },
    "name2": {
        "value": "100",
        "operate": 2
    },
    "name3": {
        "value": "100",
        "operate": 2
    }
}) // true

这个涉及到多级子对象中,遍历比较1级子对象的问题,而且要界定什么叫相同,什么叫不同,因为对于对象来是,绝对的相同是不存在的,只有子对象的各个子属性值相同。

这个其实是子对象遍历问题,一般其实很少做这样的处理,因为子对象稍微一复杂,这样的比较就很耗费资源啦,当然如果要进行的是全部相同比较,这个还稍微好一些,如果是找出其中是否有相同的,把相同的归到1个二维数组中,这个就比较浪费资源啦。

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