【问题标题】:retrieving data from array is not working properly从数组中检索数据无法正常工作
【发布时间】:2018-01-20 18:00:53
【问题描述】:

我有这个数组

[
   {id: "1280-00-477-5893-OkqcPp3xJwfgmNinwGsKZmAa8xt1-1514575144592", name: "Cancelled -> Replaced by 1280005462575", price: "$324", imgsrc: "https://firebasestorage.googleapis.com/v0/b/honeyb…=media&token=3acd47c0-773a-48c1-8956-9a025769b91e", availableqty: "4", …}
   {id: "1510-00-140-1627-OkqcPp3xJwfgmNinwGsKZmAa8xt1-1514546926962", name: "AIRPLANE UTILITY", price: "$890", imgsrc: "https://firebasestorage.googleapis.com/v0/b/honeyb…=media&token=01267792-8f7f-40a6-921b-699e4366e5cb", availableqty: "65", …}
]

我想使用每个对象的 id 并针对 firebase 数据库运行它以检索更多数据。

  $('.checkout').click(function(){

// is user authenticated 

 firebase.auth().onAuthStateChanged((user) => {
    if (user) {
        var userId = firebase.auth().currentUser.uid;
        for (var i = 0; i < cartarry.length; i++) {
                    var id = cartarry[i].id;
                    var finalqty = cartarry[i].quantity;
                    var price = cartarry[i].price;
                    var itemref = Cataloguedatabase.ref('/Listings/' + id).once('value', function(snapshot) {
                        var listingdetail = snapshot.val();
                        // subtract ordered quantity from available quantity
                        var availableqty = parseInt(listingdetail.Ava_QTY);
                        var orderedqty =  parseInt(finalqty);
                        var qtyleft = availableqty - orderedqty;
                        console.log("orderd qty  ", orderedqty)
                        console.log("Available qty  ", availableqty)
                        console.log("What is now left is ", qtyleft)
                        console.log("priceee is ", price)                           

                    })
    }

} else {

    window.location = "../html/auth.html"
}

})

})

代码有效,但由于某种原因,它只打印出 price 和 orderedqty 的最后一个数组值。例如,它不是打印出 324 美元和 890 美元,而是两次打印出 890 并且数量也一样。我做错了什么,我该如何解决?

【问题讨论】:

  • let id = ... let finalqty = ... 等
  • 这是因为var price 的范围是处理程序,所以控制台只显示它设置的最后一个值,因此你只显示最后一个值。不过,for 将拥有自己的范围,let,所以let price = ...

标签: javascript arrays firebase


【解决方案1】:

使用let 而不是var 声明您的变量

let id = cartarry[i].id;
let finalqty = cartarry[i].quantity;
let price = cartarry[i].price;

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多