我正在建立一個網上商店,用戶可以在其購物籃和結帳中添加其他商店的產品(如AliExpress)。JavaScript對象數組,長度= 0
在車概述頁面,籃下的內容所示店進行排序。如果同一產品多次添加到不同的商店,產品將在每家商店展示。
現在,我想創建與那家商店訂購的產品每家商店的訂單。我正在使用Angular創建商品按照商店排序/過濾的列表。 這些數據將被髮送到我的Node.JS服務器,循環內容並創建一些項目的訂單。
我認爲問題在於數據像'對象'而不是'數組'一樣被處理。我找到了一個將對象轉換爲數組的函數,但長度仍爲'0'。
我怎樣才能處理數據,這樣我就可以通過不同的項目循環?
AngularJS代碼由商店
$scope.filterProducts = function(groupName) {
$scope.productList = [];
$http({
method: 'GET',
xhrFields: {withCredentials: true},
url: '/loadCart'
}).then(function successCallback(response){
if (response.data) {
var mapByShop = function(arr, groupName) {
return arr.reduce(function(result, item) {
result[item[groupName]] = result[item[groupName]] || {};
result[item[groupName]][item['productId']] = item;
console.log('GROUPNAME en RESULT', groupName, result);
return result;
}, {});
};
if (response.data.length > 0) {
if (groupName == 'shopName') {
$scope.productList = mapByShop(response.data, groupName);
} else {
$scope.checkoutList = mapByShop(response.data, groupName);
}
}
}
}, function errorCallback(response){
console.log(response);
});
}
的$scope.productList
在$http POST
函數被作爲 '數據' 排序車。
Node.js的代碼,以將對象轉換爲一個數組
function convertObjectToArray(object, cb){
var cartContent = [];
for (var i in object) {
cartContent[i] = object[i];
}
console.log("convertObjectToArray");
return cb(cartContent);
}
碼來處理數據(其中長度爲零)
convertObjectToArray(req.body.cart, function(result){
console.log(isArray(result));
console.log('result', result);
console.log("lenght", result.length);
})
供參考:所述isArray
功能
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
FYI(這可能會或可能不會有什麼的問題),這是一個非常貧窮的'isArray'功能。如果您在服務器端使用它,請更新到任何最新版本的NodeJS,並使用'Array.isArray'代替。如果沒有,或者你因爲某些原因升級,爲您墊片的代碼應該是'返回Object.prototype.toString.call(myarray的)===「[對象數組]」;' –
您可以用'角。 isArray'來檢查它是否是一個數組 – Icycool
你可以用'Array.isArray'爲'isArray'功能 – Rajesh