js 判断一个数组中所有对象的其中两个属性值是否相同

let arr = [

{name: '张三',sex:男},

{name: '李四',sex:女},

{name: '王五',sex:女},

{name: '张三',sex:男},

],

这个数组里可能会有很多数据。
我需要判断其中两个对象中name属性值和sex属性值是否相同,只要其中两个属性值都相同,就返回true,否则返回false。(并不是只跟第一个或第二个相比较,是所有的对象都要相互比较)


回答:

js 判断一个数组中所有对象的其中两个属性值是否相同

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,说的是,顺序不一样也不对。
js 判断一个数组中所有对象的其中两个属性值是否相同


回答:

    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、返回值应该为 Booleantrue or false
2、只要 属性值 namesex 值相同就返回 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)


回答:

  1. 把数组每一项转化为字符串
  2. 对处理后的数组排序,这样如果数组里有相同项是会相邻的
  3. 遍历数组判断相邻两项是否相等

    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

回到顶部