尝试在localStorage中获取对象时,获取null

时间:2017-12-06 01:02:39

标签: javascript local-storage

我有这段代码:

let cart = [];
let item1 = {
        name: "CD - Animal",
        price: "12",
        qntd: "0"
    };

let item2 = {
    name: "CD - Cannibal",
    price: "10",
    qntd: "0"
};

$("button").click(function() {
    event.preventDefault();
    var li = $(this).parent();
    var quantity = $(li).find('input[type=number]').val();
    eval($(this).val()).qntd = quantity;
    cart.push(eval($(this).val()));
    console.log(item1.qntd);
    localStorage.setItem(cart, JSON.stringify(cart));
    console.log(cart[0].name);
    console.log(JSON.parse((localStorage.getItem(cart[0].name))));
});

cart[0].name不返回对象的名称,而是返回null。

cart[0]正确返回对象0:{name: "CD - Animal", price: "12", qntd: "3"},但当我尝试获取cart[0].name时,它返回null而不是“CD - Animal”。

HTML:

<div class="card-content animal">
    <form style = "display: flex; justify-content: space-between; flex-wrap: wrap;">
        <input type = "number" class = "qntd" placeholder="Quantidade" style = "width: 100%; margin-top: -20px;" maxlength="10">
        <button class="btn waves-effect waves-light" type="submit" name="action" value = "item1">Add
            <i class="material-icons right">attach_money</i>
        </button>
    </form>
</div>

2 个答案:

答案 0 :(得分:0)

这里的一个问题是eval很糟糕,你正在使用它,而你引用的变量不在全局范围内,而这正是eval所在的地方。使用更好的数据结构,不要依赖变量。

var items = [
        {
            name: "CD - Animal",
            price: "12",
            qntd: "0"
        }, {
        name: "CD - Cannibal",
        price: "10",
        qntd: "0"
    }
]

现在您可以使用items[0].qntd

来引用它

或者您想使用密钥,将其切换为对象而不是数组。

var items = {
     item1: {
       name: "CD - Animal",
       price: "12",
       qntd: "0"
     }, 
     item2: {
        name: "CD - Cannibal",
        price: "10",
        qntd: "0"
    }
 }

答案 1 :(得分:0)

在已解析的localStorage项目上使用索引。

尝试使用JSON.parse((localStorage.getItem(cart)))[0].name代替

JSON.parse((localStorage.getItem(cart[0].name)));