我对JavaScript ES6还有点陌生,我不太理解为什么以下代码没有按照预期工作:
let check = [{name: 'trent'},{name: 'jason'}].includes({name: 'trent'});
// expect true - returns false
谢谢!
我对JavaScript ES6还有点陌生,我不太理解为什么以下代码没有按照预期工作:
let check = [{name: 'trent'},{name: 'jason'}].includes({name: 'trent'});
// expect true - returns false
谢谢!
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
管道传输
let check = [{name: 'trent'}, {name: 'jason'}]
.map(item => item.name)
.includes('trent');
简单又快速
let check = [{name: 'trent'}, {name: 'jason'}].some(el => el.name === 'trent')
它无法工作是因为对象从未相同,每个对象都有自己的引用:
使用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);
includes
检查值是否存在于数组中,在您的情况下,该值是引用值,对于每个字面值的声明都是不同的(即使字面值相同)
Demo
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 );
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));
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)));}
px.includesXY(x,y)
... 有人能帮忙吗?!) - ashleedawglet check = [{name: 'trent'},{name: 'jason'}].find(element => element.name === 'trent');
===
也适用于对象。 - Teemu
Array.prototype.includes
使用 SameValueZero 算法来确定值之间的相等性。相关问题:如何比较对象的 Array.prototype.includes 函数。 - Sebastian Simon