[英]How to compare 2 arrays of object with different length?
我在角度應用程序上工作,必須比較2個對象數組:
ar1 = [{id: 2, itemId: 1},
{id: 5, itemId: 3},
{id: 18,itemId: 13},
{id: 16,itemId: 14}]
ar2 = [{id: 13, itemId: 1},
{id: 12, itemId: 14}]
我嘗試做這樣的事情:
for(let i = 0 ; i < this.ar1.length ; i++){
if(this.ar2[i] != undefined){
if(this.ar1[i].itemId == this.ar2[i].itemId){
console.log("in and ==itemId",this.ar2[i])
}
else{
console.log("in and !=itemId",this.ar1[i])
}
}
else{
console.log("undefined",this.ar1[i])
}
}
還給我的是:
in and ==itemId {id: 13, itemId: 1}
in and !=itemId {id: 5, itemId: 3}
undefined {id: 18, itemId: 13}
undefined {id: 16, itemId: 14}
我想要一個可以告訴我哪個對象在2個數組中而哪個對象不在2個數組中的函數。
這不是重復的原因,我不想看到2個對象數組之間的差異,但要查看itemId是否相同並獲取具有相同itemId的對象。
您要遍歷兩個數組,以便可以將ar1
的所有值與ar2
所有值進行比較。
這是運行代碼片段的基本邏輯:
let ar1 = [ {id: 2, itemId: 1}, {id: 5, itemId: 3}, {id: 18,itemId: 13}, {id: 16,itemId: 14} ]; let ar2 = [ {id: 13, itemId: 1}, {id: 12, itemId: 14} ]; for (let x = 0; x < ar1.length; x++) { for (let y = 0; y < ar2.length; y++) { if (ar1[x].itemId === ar2[y].itemId) { console.log("id: " + ar1[x].id + ", itemId: " + ar1[x].itemId + " = id: " + ar2[y].id + ", itemId: " + ar2[y].itemId); } } }
您可以通過使用forEach
而不是傳統的for循環來進一步簡化此操作。 您還可以更改console.log
邏輯以適合您希望輸出的任何數據。
您遍歷了兩個數組,發現它的arr1的id是否存在於arr2中
ar1 = [{ id: 2, itemId: 1 }, { id: 5, itemId: 3 }, { id: 18, itemId: 13 }, { id: 16, itemId: 14 } ] ar2 = [{ id: 13, itemId: 1 }, { id: 12, itemId: 14 } ] for (let i = 0; i < this.ar1.length; i++) { id = false; for (let j = 0; j < this.ar2.length; j++) { if (this.ar1[i].itemId == this.ar2[j].itemId) { id = true data = this.ar2[j]; } } if (id) { console.log("in and ==itemId", data) } else { console.log("in and !=itemId", this.ar1[i]) } }
而不是使用傳統for
foreach
,它會遍歷數組中的每個元素並檢查數組中的另一個元素。
your.component.ts
export class AppComponent {
name = 'Angular';
ar1 = [{ id: 2, itemId: 1 },
{ id: 5, itemId: 3 },
{ id: 18, itemId: 13 },
{ id: 16, itemId: 14 }]
ar2 = [{ id: 13, itemId: 1 },
{ id: 12, itemId: 14 }]
constructor () {
this.compareArray()
}
compareArray() {
this.ar1.forEach( array1Ttem => {
this.ar2.forEach( array2Item => {
if(array1Ttem.itemId == array2Item.itemId){
console.log("in and ==itemId",array1Ttem);
}
else{
console.log("in and !=itemId",array1Ttem);
}
})
})
}
}
希望這會有所幫助!
您可以迭代ar1
並使用findIndex
檢查ar2
上是否存在具有相同itemId
的對象
let ar1 = [{ id: 2, itemId: 1 }, { id: 5, itemId: 3 }, { id: 18, itemId: 13 }, { id: 16, itemId: 14 } ] let ar2 = [{ id: 13, itemId: 1 }, { id: 12, itemId: 14 } ] ar1.forEach(function(item) { let findIndexInar2 = ar2.findIndex(function(elem) { return item.itemId === elem.itemId; }) if (findIndexInar2 !== -1) { console.log('itemId present in ar2') } else { console.log('itemId not present in ar2') } })
像這樣 :
const ar1 = [
{ id: 2, itemId: 1 },
{ id: 5, itemId: 3 },
{ id: 18, itemId: 13 },
{ id: 16, itemId: 14 },
]
const ar2 = [{ id: 13, itemId: 1 }, { id: 12, itemId: 14 }]
const inTwoArray = []
const notInTwoArray = []
ar1.forEach(el => {
if (ar2.find(el1 => el1.itemId === el.itemId)) {
inTwoArray.push(el)
} else {
notInTwoArray.push(el)
}
})
console.log(inTwoArray)
console.log(notInTwoArray)
以下代碼段將幫助您找到您的itemId
常見的位置-
let ar1 = [{ id: 2, itemId: 1 }, { id: 5, itemId: 3 }, { id: 18, itemId: 13 }, { id: 16, itemId: 14 } ]; let ar2 = [{ id: 13, itemId: 1 }, { id: 12, itemId: 14 } ]; let checkCommonElements = function(arr1, arr2) { arr1.forEach((object1, index1) => { let flag = false; arr2.forEach((object2, index2) => { if (object1.itemId === object2.itemId) { flag = true; console.log("Item present in ar2: ", JSON.stringify(object1)); } }); if(!flag) { console.log("Item not in ar2: ", JSON.stringify(object1)); } }); } checkCommonElements(ar1, ar2);
.includes()
怎么樣?
ar1 = [ {id: 2, itemId: 1}, {id: 5, itemId: 3}, {id: 18, itemId: 13}, {id: 16, itemId: 14}, ]; ar2 = [ {id: 2, itemId: 1}, {id: 5, itemId: 25}, {id: 18, itemId: 13}, {id: 22, itemId: 14}, ]; intersection = ar1.filter(x => ar2.map(y => y.itemId).includes(x.itemId)); console.log(intersection);
和平
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.