gpt4 book ai didi

javascript - 使用indexOf()检查JS数组中是否存在特定对象

转载 作者:行者123 更新时间:2023-12-03 12:27:13 25 4
gpt4 key购买 nike

这是我的数组的结构:

[{"stockCode":"PALLET CARDS","quantity":"2"},
{"stockCode":"PALLET CARDS","quantity":"3"},
{"stockCode":"CBL202659/A","quantity":"1"},
{"stockCode":"CBL201764","quantity":"3"}]

当单击订单按钮时,我想检查此数组中是否存在stockCode。然而,每次我这样做时,我都会返回-1。

这是我检查 stockCode 的代码:

$(".orderBtn").click(function(event){
//Check to ensure quantity > 0
if(quantity == 0){
console.log("Quantity must be greater than 0")
}else{//It is so continue
//Show the order Box
$(".order-alert").show();
event.preventDefault();

//Get reference to the product clicked
var stockCode = $(this).closest('li').find('.stock_code').html();
//Get reference to the quantity selected
var quantity = $(this).closest('li').find('.order_amount').val();

//Order Item (contains stockCode and Quantity) - Can add whatever data I like here
var orderItem = {
'stockCode' : stockCode,
'quantity' : quantity
};

//Check if cookie exists
if($.cookie('order_cookie') === undefined){

console.log("Creating new cookie");
//Add object to the Array
productArray.push(orderItem);

}else{//Already exists

console.log("Updating the cookie")
productArray = JSON.parse($.cookie('order_cookie'));

//Check if the item already exists in the Cookie and update qty
if(productArray.indexOf(stockCode)!= -1){

//Get the original item and update
console.log("UPDATING EXISTING ENTRY " + productArray.indexOf("PALLET CARDS"));
}
else{
console.log("ADDING NEW ENTRY ");
//Insert the item into the Array
//productArray.push(orderItem);
}
}
}

//Update the Cookie
$.cookie('order_cookie', JSON.stringify(productArray), { expires: 1, path: '/' });

//Testing output of Cookie
console.log($.cookie('order_cookie'));
});

当用户点击订单按钮时,我得到了对stockCode的引用:

        var stockCode = $(this).closest('li').find('.stock_code').html();

我想检查此 stockCode 是否已经在 array 中,如果是,那么我将不会添加新条目,而是更新现有条目。

最佳答案

我希望我的理解是对的:

   function findByStockCode(code, stockCodeArr){
return stockCodeArr.filter(function(elem){
return elem.stockCode == code;
});
}

这当然会给你一个数组。如果长度大于零,则具有给定代码的元素已在数组中。我认为 ECMA5 已添加过滤功能,因此 IE8 可能不支持它。
[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter][1]提到了当前浏览器中未实现过滤器的情况的后备方案。
无论如何,有一个类似的 jQuery 函数,其中“this”指的是实际元素:

function jQueryFindByStockCode(code, stockCodeArr){
return $(stockCodeArr).filter(function(){
return this.stockCode == code;
});
}

编辑:
正如 DhruvPathak 提到的,$.grep 可能是比 jQuery 过滤器更合适的解决方案。 ( Grep vs Filter in jQuery? )

我再次查找了一个具有更好性能的解决方案(似乎)你可以自己编写(无论如何它都很简单):

//for defined, non-null values
function findFirstByProperty(arr, prop, value){
for(var i = 0 ; i < arr.length; i++){
if(arr[i]!=null && "undefined" !== typeof arr[i] && arr[i][prop] == value)
return arr[i];
}
return null;
}

这应该有更好的性能(特别是对于大数组)。平均而言(假设数组中有这样一个元素),它的平均速度应该是过滤器和 grep 的两倍(因为它在第一次匹配时停止)。

关于javascript - 使用indexOf()检查JS数组中是否存在特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com