2

考虑以下:

 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)如何通过引用键来删除,以及如何引用元素值没有循环的关键?

提前致谢

4

3 回答 3

4

首先,这是一个对象——而不是一个数组。数组只能具有数字索引并具有特殊语义,例如.length属性。现在,回答你的问题。

您所拥有的是一个普通的旧 JavaScript 对象,并且您正在为其分配属性。MDN 有一个关于它们的完整页面。这是一个摘要:

访问属性

使用o.keyoro["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
于 2012-06-26T11:43:40.160 回答
1

首先,如果你要用数字索引,不要使用 object {},使用 array []

其次,您添加这样的新项目:

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.
于 2012-06-26T11:38:00.370 回答
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];
于 2012-06-26T11:40:21.803 回答