Я создаю интернет-магазин, где пользователи могут добавлять продукты для одного из других магазинов в своей корзине и выписке (например, 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);
});
}
The $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);
})
FYI: функция isArray
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
FYI (это может быть или может не иметь ничего общего с этой проблемой), это очень плохой 'функция isArray'. Если вы используете его на стороне сервера, обновите его до последней версии NodeJS и вместо этого используйте 'Array.isArray'. Если нет, или вы не можете обновить по какой-либо причине, код для вашей прокладки должен быть возвращен Object.prototype.toString.call (myArray) === "[object Array]"; ' –
вы можете использовать' угловой. isArray', чтобы проверить, является ли это массивом – Icycool
Вы можете использовать 'Array.isArray' для функции' isArray' – Rajesh