具有最大插槽的多维数组



我被这个jQuery数组卡住了,在Stack Overflow上碰碰运气。不确定我在哪里犯了错。

此功能的目的是创建一个数组,用于保存具有子列表的选定项目,并在达到列表最大选择时发出警报。工作人员可以选择一道菜,例如Kebab。只能将SALAD、SAUCE配置为最大输入

阵列应该是

var id = 0;
var Option = $(this).attr('ConfigName') // SALAD
if (typeof (FOODS[id][Option]) == "undefined") {
FOODS[id][Option]={};
}
FOODS[id][Option ][0]="ONION"
FOODS[id][Option ][1]="LETTUCE"
FOODS[id][Option ][2]="CARROT" 
// Option changed to SAUCE
FOODS[id][Option][0]="MAYO"
FOODS[id][Option][1]="KETCHUP"
if(FOODS[id][Option].length<MaxSelect){
alert("Max Option Selected")
}

当添加了另一道菜时,这将增加id并使用上述方法再次存储。

当我用jQuery在上面编码时,它会显示错误FOODS[id][Option]未定义。

如果FOODS是一个数组,初始化为[],那么这就是行if (typeof (FOODS[id][Option]) == "undefined") {的评估方式:

FOODS                                    => ok, value is []
id                                       => ok, value is 0
Option                                   => ok, value is "SALAD"
FOODS[id] = [][0]                        => ok, value is undefined
FOODS[id][Option] = undefined["SALAD"]   => TypeError, cannot access property of undefined

因为您试图访问值为undefined的属性,JavaScript将抛出一个错误。

您需要初始化FOODS[id],类似于以下内容:

if (!(id in FOODS)) {
FOODS[id] = {};
}
if (typeof (FOODS[id][Option]) == "undefined") {
FOODS[id][Option]={}; // See below; this is also wrong
}

这不是唯一的问题。您还将对象数组合并。尽管您可以为对象指定数字键,但您将无法在该对象上检查length;这只是Arrays的一个特性。因此,将FOODS[id][Option]={};更改为FOODS[id][Option]=[];

最新更新