2017-10-07 98 views
1

我有一個web應用程序,用於跟蹤您的購買並顯示不同的統計信息。在其中一個頁面中,我有jQuery ajax請求,用於從API調用中加載用戶的購買信息。然後將所有購買的數據放入全局數組中,名爲G_PURCHASES,作爲JavaScript對象。JavaScript函數Array.prototype.includes()在for循環中不起作用

到目前爲止這麼好。然後我調用一個函數,它使用jQuery的Deferred()來使其可鏈接;它會迭代G_PURCHASES並通過使用Array.includes()來檢查G_PURCHASES[i].item.category是否包含在另一個名爲G_CATEGORIES的全局數組中,從而獲取所有不同的purchase.item.category(查看購買對象的相關結構)。如果不是那麼push()它到G_CATEGORIES

我有一個問題,錯誤的是,即使經過category對象已被推入G_CATEGORIES陣,Array.includes()檢查仍返回false,每一次。檢查相關的代碼和輸出以清除它。

// Relevant structure of the purchase object 
purchase = { 
    item: { 
    category: { 
     categoryID: int, 
     name: string 
    } 
} 


// Relevant code 

var G_PURCHASES = []; // array declared globally 
// it is successfully filled with @purchase objects from another function 

var G_CATEGORIES = []; // array declared globally 
// to be filled by @LoadAllCategories 

var LoadAllCategories = function() { 

    // make a jQuery Deffered 
    let func = $.Deferred(function() { 

    let allP = G_PURCHASES; // make a shortcut 
    let allC = C_CATEGORIES; // make another shortcut 
    for (var i = 0; i < allP.length; i++) { 

     // get whether the current purchase.item.category 
     // already exists in allC array 
     let exist = allC.includes(allP[i].item.category); 

     // console.log the above result 
     console.log('i = ' + i + ', category exists = ' + exist); 

     // if it doesn't exist then push it in 
     if (!exist) allC.push(allP[i].item.category); 
    } 

    this.resolve(); 

    }); 

    return func; 
} 


// Input 
G_PURCHASES has 6 @purchase objects with 3 unique item.category 'ies 

// Output 
i = 0, category exists = false 
i = 1, category exists = false 
i = 2, category exists = false 
i = 3, category exists = false 
i = 4, category exists = false 
i = 5, category exists = false 

// Result 
G_CATEGORIES contains duplicate categories 

我試圖用Array.indexOf()和jQuery的$.inArray()沒有成功。無論我是什麼,我似乎都無法找到錯誤所在。所以,如果你能告訴我爲什麼Array.includes()for循環內不起作用,我會找你,我會給你買一瓶啤酒!

+0

爲什麼不用'console.log(allC,allP [i])'看看你有什麼。 – adeneo

+0

我得到一個數組和一個對象,就像預期的那樣: 'Array [] Object {item:Object}''Array [Object] Object {item:Object}''Array [Object,Object] Object {item:Object} '等等 –

回答

3

還包括對引用相等性的檢查,因此可能有兩個具有相同屬性和值的對象,但它們仍然是不同的對象,因此它們的引用不相等。您可能需要手動檢查每個類別對象的分類ID和名稱以查找重複項。

+0

迭代Categories數組並檢查categoryID匹配的簡單二級循環會修復所有問題!謝謝! –