【问题标题】:JavaScript: Adding to an associative arrayJavaScript:添加到关联数组
【发布时间】:2012-01-09 20:09:59
【问题描述】:

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

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

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

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

我想这样存储:

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

【问题讨论】:

  • “关联数组”只是 JavaScript 中的对象。
  • 从技术上讲,您的意思是要将对象添加到数字索引的数组中。 JavaScript 没有“关联”数组。
  • 请显示您现有的函数定义,以及您如何定义它添加到的数组

标签: javascript arrays associative-array


【解决方案1】:

我会用这样的东西;

var contacts = [];
var addContact = function(name, phone) {
    contacts.push({ name: name, phone: phone });
};

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

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

【讨论】:

  • 关于 parseInt 的好点,我只看到“数字”- 没有考虑上下文 :-)
  • 刚刚发现,上面的contacts var 应该是[] 而不是{}
【解决方案2】:

JavaScript 中没有“关联数组”这样的术语,但您可以使用以下术语:

var list = [];

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

【讨论】:

  • 嗯?这是another one from MS
  • “对象作为关联数组”并不意味着 JS 有“关联数组”。一切都是 JS 中的对象,您可以向任何东西添加属性,但它不会使这些对象成为关联数组。顺便说一句,谁否决了我的回答? :)))))))))) 很有趣 :D
  • 从技术上讲,任何图灵完备语言都可以实现任何其他图灵完备语言。因此,所有计算机语言都有关联数组(减去 SQL 之类的)。同样在 JS 中,对象是使用名称/属性对的列表来实现的——这在 JS 而不是像 Java 这样的其他 OO 语言中是可能的,因为 JS 将函数视为一等公民,所以实际上它们是“作为对象的关联数组”而不是其他方式。并且 javascript 确实有它们。
  • 喜欢所有这些 cmets... 你们写这些 cmets 的表情是认真的吗? :)))) 竖起大拇指反对选民。您是否尝试在 EcmaScript 文档中找到“关联数组”定义?
  • 问题在于关联数组不是“事物”,它是数组的特定行为。 Javascript 具有可以关联地址的数组。 javascript 如何选择实现它或它选择如何调用它是 javascript 的选择,但 java 脚本仍然具有它。说 javascript 没有关联数组就像说 perl 没有函数,因为它使用“子例程”。
【解决方案3】:

如果你愿意,你可以将你的函数添加到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"}
]

【讨论】:

    【解决方案4】:
    var users = [];
    
    users.push({name: "John", number: "999"});
    users.push({name: "Adam", number: "5433"});
    

    【讨论】:

      【解决方案5】:

      这样的事情应该可以解决问题:

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

      【讨论】:

      • 您可能会指出 OP 使用关联数组;他正在使用一个对象数组。
      【解决方案6】:

      我假设您使用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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 2021-11-27
        • 1970-01-01
        相关资源
        最近更新 更多