考虑以下事项:
var service_call_array = {
3 : 'test',
4 : 'more of a test eh?',
5 : 'more info required'
};
我可以循环通过它
$(function() {
$.each(service_call_array, function(key, value) {
alert(key + ':' +value);
}
});
但原则上我会添加第四项密钥:值,如何通过密钥更新或编辑或更改值(比如密钥:4)如何通过引用密钥删除,以及如何引用键没有循环的元素值?
提前致谢
答案 0 :(得分:4)
首先,这是一个对象 - 而不是一个数组。数组只能有数字索引,并且具有特殊的语义,例如.length
属性。现在,回答你的问题。
你所拥有的是一个普通的旧JavaScript对象,并且你正在为它分配属性。 MDN has a complete page about them.以下是摘要:
使用o.key
或o["key"]
语法,例如:
var object = {
foo: "bar"
};
alert(object.foo); // displays "bar"
将对象用作查找表时,o["key"]
语法特别方便,例如:
var translate = {
"hello": "bonjour",
"goodbye": "au revoir"
};
var word = "hello"; // received through some kind of user input
alert(translate[word]); // displays "bonjour"
与访问属性类似,但现在将它们放在作业的左侧。该属性是否已存在并不重要,必要时将创建该属性。
var object = {};
object.foo = "bar";
alert(object.foo); // still "bar"
使用delete
声明。
var object = {
foo: "bar"
}
alert(object.foo); // displays "bar"
delete object.foo;
alert(object.foo); // displays "undefined"
alert(object.foo === undefined); // displays true
答案 1 :(得分:1)
首先,如果您要使用数字进行索引,请不要使用对象{}
,请使用数组[]
。
其次,您添加这样的新项目:
var obj = {};
obj.newItem = 'newItem'; // You can use the dot syntax when your member
// name is a valid identifier.
obj['new Item 2'] = 'newItem2'; // Or, you can use the bracket notation if it
// isn't.
var arr = [];
arr[0] = 'firstItem'; // Use the bracket syntax.
arr[42] = 'anotherItem'; // The indices don't have to be contiguous.
要访问或更新值,您可以使用类似的语法。所有值都是动态的,因此无论您是第一次添加还是更新,它的语法都是相同的:
var a = obj.newItem; // Access with dot syntax
var b = obj['new Item 2']; // Access with bracket syntax
obj.newItem = 'updatedValue' // Update with new value using dot syntax
obj['new Item 2'] = 42 // Update with new value using bracket syntax
// Note that the type of the value doesn't have
// to remain the same.
要实际删除值,请使用delete
关键字:
delete obj.newItem; // Now, obj.newItem is undefined again.
答案 2 :(得分:1)
您可以通过致电service_call_array.key
获得参考,然后您可以使用它更新或执行任何操作。
添加:
service_call_array.key = 'newValue';
service_call_array[key] = 'newValue';
删除:
delete service_call_array.key;
delete service_call_array[key];