问题描述
我对JS还是很陌生,我在一个对象数组的问题上苦苦挣扎,如果对象中的任何键值对重复,我想返回true
var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackBerry","id":3},{"key":"xiomi","id":4},{"key":"asus",id:5}]}
由于键:“ Xiomi”出现两次,因此函数应返回true
我尝试使用lodash函数
var uniqueLookup =_uniqBy(lookupValues,'key')
if(_.isEqual(uniqueLookup,lookup)) return true
有效,但我想我缺少了一些东西
解决方法
您处在正确的轨道上。通过检查键是否唯一,将数组的长度与缩短的数组进行比较。
var lookupValues = [{"key":"xiomi","value":"phone","id":1},{"key":"samsung","value":"tab",id:2},{"key":"blackberry","id":3},{"key":"xiomi","id":4},{"key":"asus",id:5}];
console.log(_.uniqBy(lookupValues,"key").length !== lookupValues.length);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
,
在这里如何在VanillaJs中做到这一点。
Set是JavaScript在ES6中获得的新数据结构。这是一组独特的价值。我们将使用map()获得的属性值列表放入其中,使用它的方式将返回此数组:
[xiomi,Samsung,blackberry,xiomi,asus]
通过Set时,我们将删除重复项,即xiomi
,最后...
是散布运算符,它将把Set
的值扩展为一个数组。
现在,如果此新数组的长度等于您的lookupValues.length
,则它没有重复项,否则存在重复项。
var lookupValues = [{"key":"xiomi",id:5}]
const isDuplicate = (lookupValues) => !([...new Set(lookupValues.map(obj => obj.key))].length === lookupValues.length)
console.log(isDuplicate(lookupValues))
,
我使用es6 Set
对象制作了一个原始Javascript代码段。
var lookupValues = [{"key":"xiomi",id:5}]
const keys = lookupValues.map((v) => v.key)
const keySetSize = new Set(keys).size
const hasDuplicate = keys.length > keySetSize
console.log(hasDuplicate)