如何解决有没有一种方法可以将类实例与该类实例数组中的元素进行比较?
我有一个对象数组,它们是作为新类Card实例创建的,还有另一个我要在数组中找到索引并进行拼接的Card类实例:
...
this.cards.push(new Card(suit,rank));
>>>
[
Card { suit: 'Diamonds',rank: 'Jack' },Card { suit: 'Spades',rank: '3' },Card { suit: 'Diamonds',rank: 'Ace' },Card { suit: 'Clubs',rank: 'King' },rank: '6' },rank: '2' },rank: '10' },rank: '7' },rank: 'Queen' },rank: '10' }
]
const match = new Card('Clubs',rank: '10');
>>> Card { suit: 'Clubs',rank: '10' }
在给定数组中搜索匹配项时,函数应返回索引7。 indexOf()方法无法产生预期的结果。我怀疑我是在比较内存中的位置而不是值,但不知道如何解决此问题。
解决方法
您只需编写自定义indexOf函数即可检查对象。
function myIndexOf(o) {
for (var i = 0; i < this.cards.length; i++) {
if (this.cards[i].suit == o.suit && this.cards[i].rank == o.rank) {
return i;
}
}
return -1;
}
,
您的假设
我怀疑我是在比较内存中的位置而不是值
是正确的。 Array.prototype.findIndex
是您的朋友在这里:
function compareCards(a,b) {
return Object.keys(a).every(key => a[key] === b[key]) && Object.keys(b).every(key => b[key] === a[key]);
}
const arr = [{
suit: 'Diamonds',rank: 'Jack'
},{
suit: 'Spades',rank: '3'
},{
suit: 'Diamonds',rank: 'Ace'
},{
suit: 'Clubs',rank: 'King'
},rank: '6'
},rank: '2'
},rank: '10'
},rank: '7'
},rank: 'Queen'
},rank: '10'
}
];
const cardToFind = {
suit: 'Clubs',rank: 'King'
};
let index = arr.findIndex(card => compareCards(card,cardToFind));
console.log(index);
,
您可以使用findIndex方法。它返回通过测试的数组中第一个元素的索引(作为函数提供)。
class Card {
constructor(suit,rank) {
this.suit = suit;
this.rank = rank;
}
}
let cards = [
{ suit: "Diamonds",rank: "Jack" },{ suit: "Spades",rank: "3" },{ suit: "Diamonds",rank: "Ace" },{ suit: "Clubs",rank: "King" },rank: "6" },rank: "2" },rank: "10" },rank: "7" },rank: "Queen" },];
const match = (card,cards) => {
return cards.findIndex((x) => x.suit === card.suit && x.rank === card.rank);
};
console.log(match(new Card("Clubs","10"),cards));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。