關於判斷式的地方,我想判斷陣列裡物件名字是否重複(已經事先在陣列裡放入不相同的物件),執行第一次是正常的console.log("沒有相同物件,將新物件推入陣列中"),陣列有成功推入新的物件,但執行第二次之後都會是一樣的結果,導致我的陣列裡面有一堆重複的相同物件...
想請問判斷式要如何寫才能執行console.log("有相同物件,物件內數量加上新物件數量")的部分呢?
$("#addporduct").click(
    function(){
        var quantity = parseInt($("input.quantity").val())
        var name = String($("h1#name").text())
        var price = parseInt($("span#price").text())
        var img = "<img src='"+$("#img").attr("src")+"'></img>"
        var cart = {
            name:name,
            price:price,
            quantity:quantity,
            img:img
        }
        var newcart = JSON.parse(localStorage.getItem("carts"))
        if(localStorage.carts==="[]"){//如果是空陣列
            console.log("是空陣列,將新物件推進陣列")
            var newcarts = []
            newcarts.push(cart)
            localStorage.setItem("carts",JSON.stringify(newcarts))
            console.log(localStorage)
        }else if(newcart){//如果陣列裡有物件
            console.log("陣列裡有物件,判斷物件名是否有相同")
            var carts = JSON.parse(localStorage.getItem("carts"))
            for(var i=0;i<carts.length;i++){
                if(carts[i].name==cart.name){//判斷如果有相同物件
                    console.log("有相同物件,物件內數量加上新物件數量")
                    carts[i].quantity=carts[i].quantity+cart.quantity
                    localStorage.setItem("carts",JSON.stringify(carts))
                    console.log(localStorage)
                }else if(carts[i].name!=cart.name){//判斷如果沒有相同物件
                    console.log("沒有相同物件,將新物件推入陣列中")
                    carts.push(cart)
                    localStorage.setItem("carts",JSON.stringify(carts))
                    console.log(localStorage)
                }
               break
            }
        }else{//如果連陣列都沒有
            console.log("建立空陣列,將新物件推入陣列中")
            var newcarts = []
            newcarts.push(cart)
            localStorage.setItem("carts",JSON.stringify(newcarts))
            console.log(localStorage)
        }
        quantity = $("input.quantity").val(1)
    }
)
不好意思第一次發問,新手寫得很亂請見諒...
拜託各位大大解答了QQ
那部分不應該用迴圈來判斷吧
這樣會判斷到有相同的時候
已經會執行很多次的"沒有相同物件,將新物件推入陣列中"
應該直接判斷陣列中有沒有
$.map(carts, function(item, index) {
  return item.name;
}).indexOf(cart.name);
-1等於找不到執行"沒有相同物件,將新物件推入陣列中"
不是-1執行"有相同物件,物件內數量加上新物件數量"
試試看但我也沒試過上面那個語法
你是否要使用 IIFE ?
因為函數沒有命名但 IIFE 沒有寫完整