我对javascript ES6有点新鲜,我很难理解为什么下面没有按预期运行:
let check = [{name: 'trent'},{name: 'jason'}].includes({name: 'trent'});
// expect true - returns false
谢谢!
答案 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()
方法确定数组是否包含某个元素,并根据需要返回true
或false
。但是在比较两个物体的方式上它们是不相等的。它们应该在内存中具有相同的引用以使它们彼此相等。
您可以使用的内容如下所示
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));