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

时间:2018-03-09 06:39:23

标签: javascript ecmascript-6

我对javascript ES6有点新鲜,我很难理解为什么下面没有按预期运行:

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

谢谢!

7 个答案:

答案 0 :(得分:6)

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 




答案 1 :(得分:3)

它没有用,因为对象永远不会相同,每个对象都有自己的引用:

改为使用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);




答案 2 :(得分:1)

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 ); 

答案 3 :(得分:1)

检查数组是否包含 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)));}

答案 4 :(得分:0)

其中一个

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

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

答案 5 :(得分:0)

你可以使用Array.find()方法来检查数组是否包含对象为“Array.includes对数组中的'==='进行检查”这对于对象不起作用

示例解决方案:

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

答案 6 :(得分:0)

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));