我有一個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
循環內不起作用,我會找你,我會給你買一瓶啤酒!
爲什麼不用'console.log(allC,allP [i])'看看你有什麼。 – adeneo
我得到一個數組和一個對象,就像預期的那樣: 'Array [] Object {item:Object}''Array [Object] Object {item:Object}''Array [Object,Object] Object {item:Object} '等等 –