0

我有一个名为arr. 我正在向它添加项目 ( arr.push(val)) 并将值打印为 1 ( arr.length) - 当我仅添加 1 个项目时它会打印 1。

但是,当我添加 2 个值/项目(arr.push(val))时,我仍然得到结果,1而不是2

var arr=[];
arr.push(val);
console.log(arr.length);
console.log(arr);

当我添加1 个值时,我得到console.log(arr);asOne

当我添加2值时,我得到console.log(arr);as的输出One,Two(但长度打印为 1)

为什么是这样 ?我该如何解决这个问题。

更新

checkBox: function (val) {

var arr=[];
arr.push(val.name);
console.log(arr.length);
console.log(arr);

} 
4

3 回答 3

3

每次调用该函数时,您都在重新实例化您的数组。因此它只会包含当前值。您应该尝试:

var arr      = [],
    checkbox = function(val) {
        arr.push(val);
        console.log(arr.length);
    };

checkbox('hello');
checkbox('moto');
于 2012-08-23T14:53:34.847 回答
2

可能您正在将字符串或数组推入该数组!

以下作品:

arr.push("one","two"); // -> arr =["one","two"]

这也可以,但只将一个元素放入数组中

arr.push("one,two"); // -> arr =["one,two"] <- the first element is a string "one,two"

这与将字符串推入数组的方式相同:

arr.push(["one","two"]); // arr = [["one","two"]] <- the first element is an array ["one,two"]

如果它是一个字符串,则需要先将其拆分(例如,当它是名称时)并将值放入第一个数组中concat()

var a = [];
var name = "John Doe";
var b = name.split(" "); // creates an array ["John","Doe"]
a.concat(b);
于 2012-08-23T14:49:21.740 回答
1

向数组添加两个元素应始终正确更新其长度属性,无论您是一次添加一个元素还是将它们添加到一个组中。

获得长度差异的唯一方法是将这两个值添加为数组或单个字符串,在这种情况下,原始数组中只有 1 个元素,并且该元素将是包含 2 个元素的数组或单个字符串。

var blah = [];
blah.push('foo');
blah.push('bar');
console.log(blah.length); // 2

var boo = [];
boo.push('foo', 'bar');
console.log(boo.length); // 2

var baz = [];
baz.push(['foo', 'bar']);
console.log(baz.length); // 1

http://jsfiddle.net/EcHtU/

于 2012-08-23T14:50:06.050 回答