我发现了很多相关的问题,答案都是关于for...in循环和使用hasOwnProperty的,但是我做的事情都不能正常工作。我所要做的就是检查数组中是否存在键,如果不存在,就添加它。
我从一个空数组开始,然后在使用jQuery清理页面时添加键。
最初,我希望像下面这样简单的方法能起作用:(使用通用名称)
if (!array[key])
array[key] = value;
不去。接着说:
for (var in array) {
if (!array.hasOwnProperty(var))
array[key] = value;
}
还尝试:
if (array.hasOwnProperty(key) == false)
array[key] = value;
所有这些都不起作用,要么没有任何东西被推送到数组中,要么我尝试的东西不比简单地声明array[key] = value
更好,为什么这么简单的事情这么难做,有什么想法让它起作用吗?
8条答案
按热度按时间wn9m85ua1#
一般来说,使用对象更好,因为JavaScript实际上没有关联数组:
然后使用
in
检查密钥:正如在下面的注解中正确指出的,这个方法 * 仅 * 在键是字符串或可以表示为字符串的项(如数字)时有用。
8yoxcaq72#
Array.indexOf
。*如果您想依赖jQuery,请改用
jQuery.inArray
:但是,如果所有的值都可以简单且唯一地表示为字符串,则应该使用Object而不是Array,以获得潜在的 * 巨大 * 速度提升(如@JonathanSampson的答案所述)。
kfgdxczn3#
ES6中提供了一个更好的替代方法,使用Sets。因此,如果需要一个不应该添加重复项的数组,建议使用Sets,而不是声明Arrays。
k3bvogb14#
这里有一个简单的方法使用传播。
此代码将给予重复项:
因此,您可以在合并数组的同时过滤和删除它们。
cyej8jka5#
你可以试试这个:
Easiest way to find duplicate values in a JavaScript array
ruarlubt6#
这个逻辑是错误的。考虑一下这个:
没有理由循环检查 key(或数组的 indices)是否存在。现在,values 是另一回事了...
快乐编码
waxmsbnn7#
输出:
s8vozzvw8#