3 回答

TA貢獻1799條經驗 獲得超6個贊
您的代碼中有一個問題,數組索引從零開始,但您從 1 開始循環
let index = 1
所以如果第一個應用程序更新,代碼將無法檢測到它。根據您的代碼,我將索引編輯為零并嘗試創建一些轉儲數據,并嘗試運行您的代碼??雌饋磉\作良好
const currentCachedListOfApps = [
{
ApplicationId: 1,
AppName: "App 1",
LastUpdateDateTime: 4
},
{
ApplicationId: 2,
AppName: "App 2",
LastUpdateDateTime: 2
}
];
const arrayOfFormattedApps = [
{
ApplicationId: 1,
AppName: "App 1",
LastUpdateDateTime: 1
},
{
ApplicationId: 2,
AppName: "App 2",
LastUpdateDateTime: 3
}
];
const arrayOfAppsWithUpdates = [];
let count = 0;
for (let appToCompare of arrayOfFormattedApps) {
let hasMatch = false;
for (let index = 0; index < currentCachedListOfApps.length; ++index) {
var cachedApp = currentCachedListOfApps[index];
if (cachedApp.ApplicationId === appToCompare.ApplicationId) {
if (cachedApp.LastUpdateDateTime !== appToCompare.LastUpdateDateTime) {
arrayOfAppsWithUpdates.push(appToCompare);
hasMatch = true;
console.log(cachedApp.AppName + ' is being updated')
++count;
break;
}
}
}
if (hasMatch) {
arrayOfAppsWithUpdates.push(appToCompare);
}
}
console.log(arrayOfAppsWithUpdates);
所以這里唯一的問題是你為每個更新的應用程序將數據推送到arrayOfAppsWithUpdates兩次。所以請再次仔細檢查您的 API 以確保它正確。
尤其是每個 App 信息對象上的兩個屬性ApplicationId和LastUpdateDateTime,因為您使用===來比較它們,所以===也會比較數據類型(數字、字符串...)和數據值,因此請確保它們相同數據類型也是
希望這有幫助

TA貢獻1820條經驗 獲得超3個贊
它看起來確實是正確的,所以也許在這個代碼塊之外有一些東西是錯誤的??赡苷业藉e誤的一種方法是注銷您比較的 hte 屬性。
...
console.log(cachedApp.ApplicationId +" === "+ appToCompare.ApplicationId)
if (cachedApp.ApplicationId === appToCompare.ApplicationId) {
console.log(cachedApp.LastUpdateDateTime +" !== "+ appToCompare.LastUpdateDateTime)
if (cachedApp.LastUpdateDateTime !== appToCompare.LastUpdateDateTime) {

TA貢獻1813條經驗 獲得超2個贊
我會做類似下面的事情,雖然我沒有看到任何錯誤,只是一些笨拙的代碼:
let appsToUpdate = arrayOfFormattedApps.find((appToCompare, index)=> {
for(let cachedApp in currentCachedListOfApps) {
if(cachedApp.ApplicationId === appToCompare.ApplicationId) {
if (cachedApp.LastUpdateDateTime !== appToCompare.LastUpdateDateTime) {
return appToCompare
}
}
}
})
// Do work on appsToUpdate
添加回答
舉報