0

I face a problem when tried to assign a value with a specific index. suppose I have javascript variable like

var track = new Array();

Now I assign a value for a specific index like-

track[10]= "test text";

now array has one value and it's length would be 1. But the main problem is it show it's length is 11.

alert(track.length);   // 11 but I expect 1

and if I print its value then it shows like--

alert(track); // ,,,,,,,,,test text

and if I console this array then it show like below--

console.log(track); // undefined,undefined,undefined,undefined,.....,test text

I am very much confused because I assign only one value but it show 11. How it assign it's value and what characteristics array variable shows. Can anyone explain me and how to get its length 1 using below code--

 var track = new Array();
 track[10]= "test text";
 alert(track); // test text
 alert(track.length); // 1
 console.log(track); // test text
4

4 回答 4

1

Array对象会自动填充缺失的索引。它给出长度 11 的原因是因为索引从0.

如果您想使用键值,只需使用一个对象。

var track = {};

然而,它不会有任何.length价值。

于 2013-11-11T04:39:59.833 回答
0

对于此类操作,我通常更喜欢名为 Underscore.js 的库。

它抽象了数组操作。您可能想检查紧凑的方法

紧凑的工作方式如下:

_.compact([undefined, undefined, undefined, "test test"]) as  ["test test"]

然后您可以检查返回数组的长度。

虽然一个简单的方法是

filter(Boolean).length

但是如果你想使用数组,那么你可能会喜欢下划线。

于 2013-11-11T05:51:06.560 回答
0

javascript 会自动填充数组来推送你想要的元素。您可以通过执行以下操作获得“真实”计数:

track.filter(Boolean).length

但是请注意,如果您没有任何其他元素解析为“false”值(例如,空字符串或将它们设置为 false),这只会“起作用”,因此如果您想要这样做,请确保您从未实际设置任何其他将数组元素设置为虚假值,以便您可以使用此约定。例如,如果您想将其他数组值设置为虚假值,请使用类似-1的东西作为要检查的东西。

于 2013-11-11T04:41:08.013 回答
0

由于您正在设置第 10 个位置的值,因此它显示的数组大小为 11 您必须从第 0 个位置开始..

var track = new Array();
 track[0]= "test text";
 alert(track); // test text
 alert(track.length); // 1
 console.log(track); // test text

尝试这个

于 2013-11-11T04:40:11.660 回答