我正在尝试检查数组中是否存在密钥并在其中进行更改,如果不存在则添加。我需要在没有jQuery的情况下完成它。 我将数组存储在字符串中。
if (item_id in items) items[item_id] = count;
else
{
var tmp = {};
tmp[item_id] = count;
items.push(tmp);
}
item_id
和count
始终是数字。问题是,当我检查密钥是否存在时,它会检查数组中的元素数量。例如,如果我有对[{1:5},{5,3}]
并检查键5是否存在则返回false,如果我检查键1,则返回true并更改数组[{1:5},new_value]
我尝试了if (item_id in items)
,if (items[item_id])
,但没有效果。我该如何让它正常工作?
答案 0 :(得分:2)
简单修复
items
是一个常规的JS数组,而不是一个关联数组。您必须循环并检查每个对象的item_id
,如下所示。如果在循环中找不到列表中的任何位置,则将其添加到列表中(正如原始else
所做的那样):
var found = false;
for (var i=0; i < items.length; i++) {
if (item_id in items[i]) {
items[i][item_id] = count;
found = true;
break;
}
}
if (!found)
{
var tmp = {};
tmp[item_id] = count;
items.push(tmp);
}
更完整的解决方案
请注意,您可能遇到的一些困难可能是由于您选择了不寻常的数据结构,并且您可能选择以不同方式构建数据以便于查找和检索。现在你有一个不相关的对列表,[{key1 : value1}, {key2: value2}, ...]
当你真的想要一个字典(哈希映射),如{ key1: value1, key2: value2, ...}
。
如果您使用更新的结构,您的代码看起来将更像您的原始代码:
if (item_id in items) items[item_id] += count;
else
{
items[item_id] = count;
}
(我假设您实际上想要增加count
(如果它已经存在),而不是覆盖它。这假设一个关联数组(字典)作为您的数据结构。)
答案 1 :(得分:0)
尝试使用
array.indexOf(searchElement[, fromIndex]);
如果你可以使用jQuery,它有一个实用功能。
$.inArray(value, array)