Javascript:使用`“includes”查找对象数组是否包含特定对象

z9ju0rcb  于 2023-02-15  发布在  Java
关注(0)|答案(7)|浏览(453)

我对javascript ES6有点陌生,我很难理解为什么下面的代码没有按预期运行:

let check = [{name: 'trent'},{name: 'jason'}].includes({name: 'trent'}); 
// expect true - returns false

谢谢!

wribegjk

wribegjk1#

includes本质上检查是否有元素===是您要搜索的元素。对于对象,===表示字面上相同的对象,如在相同的引用(内存中的相同位置)中,而不是相同的形状。

var a1 = { name: 'a' }
var a2 = { name: 'a' }

console.log(a1 === a2) // false because they are not the same object in memory even if they have the same data

但是如果你搜索一个实际上在数组中的对象,它就起作用了:

var a1 = { name: 'a' }
var a2 = { name: 'a' }
var array = [a1, a2]

console.log(array.includes(a1)) // true because the object pointed to by a1 is included in this array
shyt4zoc

shyt4zoc2#

管道

let check = [{name: 'trent'}, {name: 'jason'}]
  .map(item => item.name)
  .includes('trent');

简单快速

let check = [{name: 'trent'}, {name: 'jason'}].some(el => el.name === 'trent')
cwtwac6a

cwtwac6a3#

它不起作用是因为对象从来都不相同,每个对象都有自己的引用:
请改用array.prototype.some

const arr = [{name: 'trent'},{name: 'jason'}];
const obj = {name: 'trent'}; 
const check = arr.some(e => e.name === obj.name);
console.log(check);
8ulbf1ek

8ulbf1ek4#

includes检查值是否存在于数组中,并且您的情况是该值是引用值并且对于每个文本声明都不同(即使文本相同)

    • 演示**
var a = {name: 'trent'};
var b = {name: 'jason'};
[a,b].includes(a);  //true

使用some代替匹配整个对象:

var objToFind = JSON.stringify( {name: 'trent'} );
let check = [{name: 'trent'},{name: 'jason'}].map( s => JSON.stringify( s ) ).some( s => s == objToFind );
rwqw0loc

rwqw0loc5#

includes()方法确定数组是否包含某个元素,并根据需要返回truefalse。但是,在比较两个对象时,它们并不相等。它们在内存中应该具有相同的引用才能相等。
您可以使用如下所示的内容

var arr = [{name : "name1"}, {name : "name2"}];

var objtoFind = {name : "name1"}
var found = arr.find(function(element) {
  return element.name === objtoFind.name  ;
});
console.log((found ? true : false));
ds97pgxw

ds97pgxw6#

检查数组是否包含x,y对:

下面是我用过几次的Faly's answer的实现。
例如,如果有一个XY坐标对数组,如:

var px=[{x:1,y:2},{x:2,y:3},{x:3,y:4}];

...并且您需要检查数组px是否包含特定的XY对,请使用此函数:

function includesXY(arr,x,y){return arr.some(e=>((e.x===x)&&(e.y===y)));}

......因此,使用上面的px数据集:

console.log( includesXY( px, 2, 3) ); //returns TRUE
console.log( includesXY( px, 3, 3) ); //returns FALSE
var px=[{x:1,y:2},{x:2,y:3},{x:3,y:4}];

console.log( includesXY( px, 2, 3) ); //returns TRUE
console.log( includesXY( px, 3, 3) ); //returns FALSE

function includesXY(a,x,y){return a.some(e=>((e.x===x)&&(e.y===y)));}
daupos2t

daupos2t7#

可以使用Array.find()方法检查数组是否包含对象,如“Array.includes检查数组中的'==='”,这对对象无效

示例解决方案:

let check = [{name: 'trent'},{name: 'jason'}].find(element => element.name === 'trent');

相关问题