【发布时间】:2017-03-29 03:01:52
【问题描述】:
我正在建立一个网上商店,用户可以在其中为购物篮中的多个商店添加产品并结帐(例如 AliExpress)。
在购物车概览页面上,购物车的内容按商店排序显示。如果在不同的店铺多次添加相同的产品,则每个店铺都会展示该产品。
现在,我想为每个商店创建一个订单,其中包含该商店订购的产品。我正在使用 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;
}
【问题讨论】:
-
仅供参考(这可能与问题有关,也可能无关),这是一个非常糟糕的
isArray功能。如果您在服务器端使用它,请更新到任何最新版本的 NodeJS 并改用Array.isArray。如果没有,或者由于某种原因您无法升级,则您的 shim 代码应为return Object.prototype.toString.call(myArray) === "[object Array]"; -
可以使用
angular.isArray判断是否为数组 -
您可以将
Array.isArray用于isArray功能 -
啊,这个功能我只用于测试目的,我会删除它,当一切正常时。感谢您的提示!
-
您希望结果集合(您称其为“数组”)的键是字符串还是整数?
标签: javascript angularjs arrays node.js object