获取数组的长度 - 打印不正确的值

时间:2012-08-23 14:39:39

标签: javascript extjs4

我有一个名为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);的输出为One

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

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

更新

checkBox: function (val) {

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

} 

3 个答案:

答案 0 :(得分:3)

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

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

checkbox('hello');
checkbox('moto');

答案 1 :(得分: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);

答案 2 :(得分:1)

向数组中添加两个元素应该始终正确地更新它的length属性,无论您是一次添加一个元素还是在组中添加它们。

如果将两个值作为数组或单个字符串添加,唯一可以获得长度差异的方法是,在这种情况下原始数组中只有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/