JavaScript:向关联数组添加内容

17

我有一个名为insert的函数,它接受两个参数(nametelnumber)。

当我调用这个函数时,我想向关联数组添加内容。

例如,当我执行以下操作时:

insert("John", "999");
insert("Adam", "5433");

我希望它被存储成这样:

[0]
{
name: John, number: 999
}
[1]
{
name: Adam, number: 5433
}

5
在JavaScript中,“关联数组”就是指对象。 - zzzzBov
2
技术上讲,您想要将对象添加到一个数值索引的数组中。JavaScript 没有"关联"数组。 - Michael Berkowski
请展示您现有的函数定义,以及您如何定义它所添加的数组。 - Michael Berkowski
6个回答

37

这样的代码应该可以解决问题:

var arr = [];
function insert(name, number) {
    arr.push({
        name: name,
        number: number
    });        
}

7
你可能会指出 OP 没有使用关联数组;他正在使用对象数组。 - Adam Rackis

5
我建议使用类似这样的代码:
var contacts = [];
var addContact = function(name, phone) {
    contacts.push({ name: name, phone: phone });
};

// Usage
addContact('John', '999');
addContact('Adam', '5433');

我认为您不应该将电话号码解析为整数,因为它可能包含空格、加号(+)甚至以零(0)开头。

关于 parseInt 的观点很好,我刚刚看到了 "Number" - 没有考虑到上下文 :-) - jabclab
刚刚发现,上面的 contacts 变量应该是 [] 而不是 {} - jabclab

4
var users = [];

users.push({name: "John", number: "999"});
users.push({name: "Adam", number: "5433"});

2

如果您想要,可以将您的函数添加到Array.prototype中。

Array.prototype.insert = function( key, val ) {
    var obj = {};
    obj[ key ] = val;
    this.push( obj );
    return this;
};

并且像这样使用它。

var my_array = [].insert("John", "999")
                 .insert("Adam", "5433")
                 .insert("yowza", "1");

[
   0: {"John":"999"},
   1: {"Adam":"5433"},
   2: {"yowza":"1"}
]

1

我假设你正在使用一些带有insert的数组引用:

var arr;
function insert(na, nu) {
  nu = Number(nu) || 0;
  //alternatively
  nu = parseInt(nu, 10);
  arr.push({ name: na, number: nu });
}
arr = [];


insert("John", "999");
insert("Adam", "5433");

-2

在JavaScript中没有"关联数组"这样的术语,但你可以使用以下内容:

var list = [];

function insert(name, number) {
  list.push({
    name: name,
    number: number
  });
}

哎?这里有微软的另一个链接 - Leon
2
“objects as associative arrays”并不意味着JavaScript拥有“关联数组”。在JavaScript中,一切都是对象,你可以给任何东西添加属性,但这并不意味着这些对象就成为了关联数组。顺便问一下,谁给我的回答点了踩?哈哈哈,真有趣! :D - ioseb
从技术上讲,任何图灵完备的编程语言都可以实现其他任何图灵完备的编程语言所能实现的功能。因此,所有计算机语言都有关联数组(除了像SQL这样的语言)。此外,在JS中,对象是使用名称/属性对列表来实现的——这在JS中是可能的,而在Java等其他面向对象的语言中则不行,因为JS将函数视为一等公民,因此它们实际上是“作为对象的关联数组”,而不是相反的情况。并且JavaScript确实拥有它们。 - gbtimmon
喜欢所有这些评论...你们写这些评论的时候是认真的表情吗?:)))) 给那些投反对票的人点个赞。你有试过在 EcmaScript 文档中找到“关联数组”的定义吗? - ioseb
1
问题在于关联数组不是一种“东西”,而是数组的一种特定行为。Javascript有可以通过关联方式寻址的数组。Javascript如何实现它或选择称呼它是Javascript的选择,但Javascript仍然拥有它。说Javascript没有关联数组就像说Perl没有函数,因为它使用“子例程”。 - gbtimmon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接