【问题标题】:Array of objects and i want to return true if any key value pair in the object is duplicate对象数组,如果对象中的任何键值对重复,我想返回 true
【发布时间】:2020-08-13 02:07:15
【问题描述】:

我对 JS 相当陌生,我正在努力解决一个问题,即有一个对象数组,如果对象中的任何键值对重复,我想返回 true

var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackberry","value":"phone","id":3},{"key":"xiomi","value":"tab","id":4},{"key":"asus","value":"phone",id:5}]}

由于键:“小米”出现了两次,所以函数应该返回 true

我尝试使用 lodash 函数

var uniqueLookup =_uniqBy(lookupValues,'key')
if(_.isEqual(uniqueLookup, lookup)) return true

有效,但我想我错过了一些东西

【问题讨论】:

标签: javascript reactjs object


【解决方案1】:

你在正确的轨道上。通过检查键是否唯一,将数组的长度与缩短的数组进行比较。

var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackberry","value":"phone","id":3},{"key":"xiomi","value":"tab","id":4},{"key":"asus","value":"phone",id:5}];
console.log(_.uniqBy(lookupValues,"key").length !== lookupValues.length);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.19/lodash.min.js"></script>

【讨论】:

    【解决方案2】:

    在 VanillaJs 中如何做到这一点。

    Set 是 JavaScript 在 ES6 中得到的一种新的数据结构。它是独特价值的集合。我们将使用 map() 获得的属性值列表放入其中,我们如何使用它将返回这个数组:

    [xiomi,Samsung,blackberry,xiomi,asus]

    通过 Set,我们将删除重复项,即 xiomi,最后 ... 是扩展运算符,它将 Set 值扩展为一个数组。

    现在,如果这个新数组的长度等于您的 lookupValues.length,那么它没有重复项,否则存在重复项。

    var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackberry","value":"phone","id":3},{"key":"xiomi","value":"tab","id":4},{"key":"asus","value":"phone",id:5}]
    
    const isDuplicate = (lookupValues) => !([...new Set(lookupValues.map(obj => obj.key))].length === lookupValues.length)
    
    console.log(isDuplicate(lookupValues))

    【讨论】:

    • 对我来说,我只是使用 Set.prototype.size 属性来获取新创建的一组键中的项目数量,并将其与之前的数组长度进行比较。
    【解决方案3】:

    我用 es6 Set 对象制作了一个普通的 Javascript 代码 sn-p。

    var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackberry","value":"phone","id":3},{"key":"xiomi","value":"tab","id":4},{"key":"asus","value":"phone",id:5}]
    const keys = lookupValues.map((v) => v.key)
    const keySetSize = new Set(keys).size
    const hasDuplicate = keys.length > keySetSize
    console.log(hasDuplicate)
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2014-02-03
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      相关资源
      最近更新 更多