我想在jquery中将特定(数字)索引添加到多维数组,然后在这些索引处分配值。每个索引本身都是一个数组,这些子数组的索引也将被动态分配。
$(document).ready(function(){
$('#Show').click(function(){
var AllItem = new Array();
$("select[name^='Item']").each(function(dropdownumber, selected) {
var name = $(this).attr('name');
var toRemove = 'Item[';
var name1 = name.replace(toRemove,'');
var CategoryCode = name1.replace(']','');
alert('item category code = ' + CategoryCode);
if (!AllItem[CategoryCode]){
//here I want that index 9 is set as an array, but it adds 9 elements ,
//I need that only one index is added i.e. 9 and its value is array
AllItem[CategoryCode] = [];
alert('added='+CategoryCode);
}
//length comes out to be 10
//but it should be 1 as I have added only one index i.e. 9 & its an array
alert('length='+AllItem.length);
//after this I need to assign values at 9th index of the array like
// AllItem[9][0] = 2; //the value of the first index of 9th index is 2
// AllItem[9][1] = 5;
// AllItem[9][2] = 6;
// AllItem[9][3] = 9;
更新:
//for adding values at indexes of AllItem : AllItem[9][1] = 5;
$(this).find(':selected').each(function(selectedoptionnumber, selected) {
var SelectedVal = $(selected).val();
if (SelectedVal > 0) {
AllItem[CategoryCode][dropdownumber] = SelectedVal;
alert(' Code = ' + AllItem[CategoryCode][dropdownumber]);
}
});
<table style="border: 2px solid #97BDC9; border-collapse:collapse;">
<tbody>
<tr>
<td>
<select name="Item[9]">
<option selected="selected" value="0">-Select-</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="button" id="Show" value="Show Selected Items" />
</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
这里我想将索引9设置为数组,但它添加了9个元素,
我需要只添加一个索引,即9,其值为数组
实际上,它不会添加九个元素,只需一个元素。那个元素位于索引8
(可能不是9
- 记住索引从0
开始;索引0-7
根本没有值。这是因为JavaScript标准数组本质上是稀疏(和aren't really arrays at all)。更多内容如下。
长度为10
但它应该是1,因为我只添加了一个索引,即9&amp;它的数组
length
属性未定义为数组中条目数的计数。它被定义为(至少)比最高数组索引大一个。由于数组可能缺少条目,因此length
可以比数组中的条目数更多(但不能更少)。
现在,如果您不需要数组对象的数组,则可以使用普通对象。唯一的区别是它没有length
属性,并且没有各种特定于数组的函数(forEach
等)。要做到这一点,只需更改
var AllItem = new Array();
行到
var AllItem = {};
您可以对对象和数组使用[]
表示法(因为数组只是对象,[]
表示法是对象,而不是数组事物),所以你的其他代码不会改变
但同样,唯一的区别是length
属性和各种数组函数。
有关如何在索引8处添加条目的更多信息不会在0-7创建条目:
执行此操作时:
var a = [];
a[8] = "value";
所有这一切都是条目8
设置为值,a.length
设置为9
。 Nothing else被添加到数组中。
console.log(0 in a); // false
console.log(1 in a); // false
...
console.log(7 in a); // false
console.log(8 in a); // true!
人们有时难以绕过它,但关键是它在上面的链接文章中:数组根本不是数组,它们只是带有一点魔力的对象。数组“索引“只是属性名称,数组”条目“只是属性。因此a[8] = "value"
在a
对象上创建一个名为“8”的属性。它不会创建任何其他属性。
当你读取不存在的属性的值(在对象或其原型上)时,你会得到值undefined
,但这并不意味着属性存在,这就是如何定义JavaScript来处理这种情况(读取不存在的属性)。
in
运算符(上面使用的)和hasOwnProperty
函数可让您测试属性是否存在 (in
查看ojbect及其原型,hasOwnProperty
仅查看对象。)
在下面提出您的更新代码问题,根据您拥有的其他代码,此行可能会出现问题,也可能不成问题:
AllItem[CategoryCode][dropdownumber] = SelectedVal;
如果你已经将对象或数组放在AllItem[CategoryCode]
那就好了。如果还没有,则会导致错误。
如果你知道你已经这样做了,那么就行了。
如果您知道没有那么做,那么:
AllItem[CategoryCode] = [];
AllItem[CategoryCode][dropdownumber] = SelectedVal;
如果您可能会或可能不会这样做,那么:
if (!AllItem[CategoryCode]) {
AllItem[CategoryCode] = [];
}
AllItem[CategoryCode][dropdownumber] = SelectedVal;
(或者有时你会看到这个:
(AllItem[CategoryCode] = AllItem[CategoryCode] || [])[dropdownumber] = SelectedVal;
但通常不需要那种难以阅读且难以调试的东西。)