所以目前我正在创建一个用于学习目的的网站。我正在使用SimpleCart 用于将用户想要购买的商品存储到localStorage中。但是,现在我想将数据从localStorage移到我的数据库中。目前我正在使用Node.js来处理这个问题。以下是我用来将其添加到我的数据库的代码示例。
function addToDBFood()
{
var OrderArray = JSON.parse(localStorage.getItem("simpleCart_items"));
var orderDetail = new Object();
for (var id in OrderArray) {
if (OrderArray.hasOwnProperty(id))
{
orderDetail.order_id = OrderArray.id;
orderDetail.order_item = OrderArray.name;
orderDetail.order_item_price = OrderArray.price;
orderDetail.order_quantity = OrderArray.quantity ;
var addToDB = new XMLHttpRequest();
addToDB.open("POST", '/orderdetail', true);
addToDB.setRequestHeader("Content-Type", "application/json");
addToDB.send(JSON.stringify(orderDetail));
}
}
}
目前我遇到的问题是我无法获取每个单独对象的属性,例如,如果我console.log(OrderArray.id)
我未定义。循环工作,据我所知,因为如果我将console.log
放在循环中,它将循环我在localStorage中有很多对象并在控制台中返回未定义的数量。我的问题是,我如何获得每个对象的属性值?
编辑:如果我要运行JSON.parse(localStorage.getItem("simpleCart_items"))
,则会返回following。
答案 0 :(得分:1)
OrderArray.id
正在id
上寻找OrderArray
属性,但您的代码似乎认为OrderArray
是某种容器(可能是一个数组,来自名称)。因此,您希望从id
中的每个条目获取OrderArray
属性。
不假设它是一个数组(以防万一),对该代码的最小改动就是填写orderDetail
:
var entry = OrderArray[id]; // <== Get this specific entry
orderDetail.order_id = entry.id; // <== Use the entry
orderDetail.order_item = entry.name; // ""
orderDetail.order_item_price = entry.price; // ""
orderDetail.order_quantity = entry.quantity; // ""
我对该代码进行了其他更改:
如果OrderArray
是一个数组,for-in
不是循环播放它的好方法;有关循环数组的许多选项,请参阅my answer here。
即使它适用于您的特定情况,我也不会创建单个对象(分配给orderDetail
)并在每个循环中覆盖其属性。我会创建单独的对象。
显然你可以在自己喜欢的代码中使用任何命名约定,但我强烈建议不要用初始资本命名局部变量(通常为构造函数保留)。所以orderArray
而不是OrderArray
。
所以也许:
function addToDBFood() {
var orderArray = JSON.parse(localStorage.getItem("simpleCart_items"));
orderArray.forEach(function(entry) {
var orderDetail = {
order_id: orderArray.id,
order_item: orderArray.name,
order_item_price: orderArray.price,
order_quantity: orderArray.quantity
};
var addToDB = new XMLHttpRequest();
addToDB.open("POST", '/orderdetail', true);
addToDB.setRequestHeader("Content-Type", "application/json");
addToDB.send(JSON.stringify(orderDetail));
});
}
...在ES5环境中。在ES2015 +环境中,大致相同:
function addToDBFood() {
const orderArray = JSON.parse(localStorage.getItem("simpleCart_items"));
for (const entry of orderArray) {
const orderDetail = {
order_id: orderArray.id,
order_item: orderArray.name,
order_item_price: orderArray.price,
order_quantity: orderArray.quantity
};
const addToDB = new XMLHttpRequest();
addToDB.open("POST", '/orderdetail', true);
addToDB.setRequestHeader("Content-Type", "application/json");
addToDB.send(JSON.stringify(orderDetail));
}
}