我在比较两个对象时遇到了问题。
我正在将传入的Object与Object Array进行比较, 查看Object是否已经在数组中。
我尝试了两种方法:
(betTemps是对象数组,tempBet是应当比较的当前对象。)
var duplicate = false;
for (let bet of this.betTemps) {
console.log(tempBet);
console.log(bet);
if(bet === tempBet) {
console.log("reached");
duplicate = true;
break;
}
}
if if after:
.. else if(duplicate){
alert("The Bet is already in the List");
} ...
添加已存在于Array中的Object后的控制台输出:
控制台输出截图
如您所见,它们是相同的,仍然将另一个对象添加到数组中。
我也尝试过使用indexOf:
这个方法if(this.betTemps.indexOf(tempBet) > -1){
alert("The Bet is already in the List");
}
添加已存在于Array中的Object后的控制台输出:
控制台输出截图
PS:
比较前的代码:
addBet(bet, index){
var tempBet = Object.assign({}, bet);
var select = (document.getElementById('select'+index)) as HTMLSelectElement;
select = select.options as HTMLSelectElement;
let count = 0;
tempBet.category = [];
for(let i = 0; i < 3; i++) {
if (select[i].selected) {
tempBet.category.push(select[i].value):
count++;
}
}
比较后的代码:
if (count == 0) {
alert("There has to be at least one Category choosen!");
} else if(duplicate <- This part changes individually which method you use ->){
alert("The Bet is already in the List");
} else {
this.betTemps.push(tempBet);
}
答案 0 :(得分:1)
检查对象是否在数组中的最佳方法是使用数组包含函数: 就像我想检查A对象是否在B数组中一样,我会检查 (A === B.includes(A))