如何在javascript

时间:2018-02-19 08:41:01

标签: javascript node.js

所以目前我正在创建一个用于学习目的的网站。我正在使用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

1 个答案:

答案 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; // ""

我对该代码进行了其他更改:

  1. 如果OrderArray是一个数组,for-in不是循环播放它的好方法;有关循环数组的许多选项,请参阅my answer here

  2. 即使它适用于您的特定情况,我也不会创建单个对象(分配给orderDetail)并在每个循环中覆盖其属性。我会创建单独的对象。

  3. 显然你可以在自己喜欢的代码中使用任何命名约定,但我强烈建议不要用初始资本命名局部变量(通常为构造函数保留)。所以orderArray而不是OrderArray

  4. 所以也许:

    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));
        }
    }