js 判断一个数组中所有对象的其中两个属性值是否相同
let arr = [ {name: '张三',sex:男},
{name: '李四',sex:女},
{name: '王五',sex:女},
{name: '张三',sex:男},
],
这个数组里可能会有很多数据。
我需要判断其中两个对象中name属性值和sex属性值是否相同,只要其中两个属性值都相同,就返回true,否则返回false。(并不是只跟第一个或第二个相比较,是所有的对象都要相互比较)
回答:
let arr = [{name: '张三',sex:'男'},
{name: '李四',sex:'女'},
{name: '王五',sex:'女'},
{name: '张三',sex:'男'},
]
arr.some((item,index,array)=>array.slice(index+1).find(other=>item.name == other.name && item.sex == other.sex));
// true
楼下@Justin,说的是,顺序不一样也不对。
回答:
for(let obj in arr){ var str= JSON.stringify(obj);
for(let obj1 in arr){
var str1= JSON.stringify(obj1);
if (str==str1){
alert('yes')
}else {
alert('no')
}
}
}
试一下,将对象转成字符串对比
回答:
new Set(arr.map(item => JSON.stringify(item))).size !== arr.length
回答:
嗯? 没理解错的话这道题正解应该同时满足以下两个条件吧;
1、返回值应该为 Boolean
值 true or false
,
2、只要 属性值 name
和 sex
值相同就返回 true
且不说采纳答案没有满足第一个条件,第二个条件也同样不满足。
假如 arr = [{ name: '张三',
sex: '男'
},
{
name: '李四',
sex: '女'
},
{
name: '王五',
sex: '女'
},
{
name: '张三',
sex: '男',
age: 10
},
];
按题意此时也应该是返回的 true 吧,
arr[0]与arr[3] name和sex值相同啊,
而不应该返回 JSON.stringify(arr[0]) === JSON.stringify(arr[3])的值吧。
所以此题的正解应该是 @扬帆启航
回答:
let arr = [ {name: '张三',sex:'男'},
{name: '李四',sex:'女'},
{name: '王五',sex:'女'},
{name: '张三',sex:'男'},
]
let tmp = null
const bool = arr.every(c => {
if (tmp === null) {
tmp = c
return true;
} else {
return tmp.name === c.name && tmp.sex === c.sex
}
})
console.log(bool)
回答:
- 把数组每一项转化为字符串
- 对处理后的数组排序,这样如果数组里有相同项是会相邻的
遍历数组判断相邻两项是否相等
var arr = [
{name: '张三',sex:'男'},
{name: '李四',sex:'女'},
{name: '王五',sex:'女'},
{name: '张三',sex:'女'}
]
arr = arr.map(obj => JSON.stringify(obj)).sort()
arr.some((v, i) => v === arr[i+1] )
以上是 js 判断一个数组中所有对象的其中两个属性值是否相同 的全部内容, 来源链接: utcz.com/p/936181.html