下面是一段工作代码。 “= true”部分让我很困惑。这就是我认为正在发生的事情。
1-创建空数组
2-选择列表项(目标)并循环。
3-如果目标列表项的类属性不在数组中,则输入if block
4-添加目标列表项的类属性并添加它们
到阵列。
我的理解是javascript使用“push”而jquery使用“add” 将项插入数组。以下代码不使用推送或添加。
var foo = [];
$($targets).each(function(i) {
if (!foo[$(this).attr('class')]) {
foo[$(this).attr('class')] = true;
}
});
答案 0 :(得分:2)
代码存在缺陷,如果要将字符串用作键,则使用对象而不是数组:
var foo = {};
然后它检查对象中的密钥是否是假的,尽管您可能希望使用in
运算符检查密钥是否存在:
$targets.each(function() {
var klass = this.className; // cache, no need for jQuery
// if `foo` doesn't have the key `klass` then add it
if (! (klass in foo)) foo[klass] = true;
});
答案 1 :(得分:1)
除非班级名称是" 1"或" 2",您无法以这种方式访问阵列内的项目。也就是说,数组是从对象构建的。例如,您可以执行以下操作:
var foo = ['a', 'b', 'c'];
foo.bar = 'hello';
foo;
//=> ['a', 'b', 'c']
foo[0];
//=> 'a';
foo['bar'];
//=> 'hello';
所以发生的事情是你的脚本没有将这些项添加到实际的数组中。相反,它将它们分配给数组,就像它是一个常规的JavaScript对象一样。