亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與數組進行比較并根據值更新的代碼從不返回更新

與數組進行比較并根據值更新的代碼從不返回更新

眼眸繁星 2021-12-02 16:57:44
我在 javascript 中有一個代碼塊,它從 API(此數據的真實來源)中獲取一組項目,并且當數組中每個對象的更新日期發生時,它應該更新我的發電機數據庫中的數據與我所擁有的不符。對我來說一切都很好,但我總是說即使我已經驗證了更新存在,也不需要更新任何內容。不太確定我在這里做錯了什么。let count = 0;    for (let appToCompare of arrayOfFormattedApps) {        let hasMatch = false;        for (let index = 1; 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);        }    }
查看完整描述

3 回答

?
哈士奇WWW

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,因為您使用===來比較它們,所以===也會比較數據類型(數字、字符串...)和數據值,因此請確保它們相同數據類型也是


希望這有幫助


查看完整回答
反對 回復 2021-12-02
?
DIEA

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) {


查看完整回答
反對 回復 2021-12-02
?
慕姐8265434

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


查看完整回答
反對 回復 2021-12-02
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號