5

在 Javascript 中,知道我可以设置一个数组,以便键是一个自动编号(从 0 开始)分配的数组:

var d_names = new Array("Sunday", "Monday", "Tuesday", 
              "Wednesday", "Thursday", "Friday", "Saturday");

// Key for Sunday is '0' 

如果我想分配密钥,我可以这样做:

    var d_names={};
    d_names[5]="Sunday";
    d_names[6]="Monday";
    d_names[7]="Tuesday";
    d_names[8]="Wednesday";
    d_names[9]="Thursday";
    d_names[10]="Friday";
    d_names[11]="Saturday";

    // Key for Sunday is '5'

但是有没有像 PHP 那样分配键的速记方法?

var d_names = new Array(5=>"Sunday", 6=>"Monday", 7=>"Tuesday", 8=>"Wednesday", 
            9=>"Thursday", 10=>"Friday", 11=>"Saturday"); 

// Doesn't work
4

6 回答 6

10

你想要的是一个对象:

var d_names = {
    5: "Sunday",
    6: "Monday"
    //...
};

然后你可以得到"Sunday"这样的:

var sunday = d_names[5];
于 2012-11-04T14:00:02.763 回答
3

在 PHP 中,具有手动定义键的数组(与以 0 开头的连续整数相反)称为“关联数组” - 这就是您在上面的示例中使用 '=>' 分隔键和值的内容。

在 Javascript 中,“关联数组”在技术上是一个“对象”(尽管 JS 中的所有内容都是一个对象——尽管这是一个更详细的主题)。

JS 中“索引数组”(连续整数键)的简写是:

var d_names = [
  'Sunday',
  'Monday',
  // etc.
];

而 JS 中对象(如关联数组)的简写是:

var d_names = {
  5: 'Sunday',
  6: 'Monday',
  // etc.
};

但是,在 Javascript 中使用索引数组 -vs- 对象/关联时应该小心。Javascript 不是 PHP,“一切都是对象”这一事实在循环时会产生影响。一个显着的区别是for(var i=0; i<arr.length; ++i){}迭代数组for(var x in obj) {}迭代对象“成员”,这可能因环境/浏览器/等而异。

于 2012-11-04T14:04:19.150 回答
1

php中的以下内容:

echo json_encode(new Array(5=>"Sunday", 6=>"Monday", 7=>"Tuesday",...11=>"Saturday")); 

将产生看起来像的 JSON

   {"5":"Sunday","6":"Monday" , "7":"Tuesday"..."11":"Saturday"}

如果通过 ajax 发送并且结果是 json 解析,它将返回一个对象:

 obj= { "5": "Sunday", "6": "Monday",....  "11": "Saturday"}

现在您可以使用 javascript 对象表示法访问:

 alert( obj['5'] )/* SUnday*/
于 2012-11-04T14:15:24.057 回答
1

JavaScript中没有关联数组。你有两个选择:

一个简单的对象,用作(未排序!)键值映射 - 易于编写为文字,也是 JSON 语法:

{
    "5": "Sunday",
    "6": "Monday",
    "7": "Tuesday",
    "8": "Wednesday",
    "9": "Thursday",
    "10": "Friday",
    "11": "Saturday"    
}

或者您可以使用 sparse Array,即没有属性 0 到 4 的值。您可以通过以下方式轻松创建它

var arr = new Array(5); // creates an empty array object with length 5
arr.push("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

这相当于文字

[,,,,, "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
于 2012-11-04T14:24:10.713 回答
0

不完全是,但你可以使用一个对象

var obj = {

5:"Sunday",
6:"Monday",
7:"Tuesday",
8:"Wednesday",
9:"Thursday",
10:"Friday",
11:"Saturday"    
}

如果想使用数组

var arr = [];
arr[4] = undefined;
arr.push("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
于 2012-11-04T14:04:43.453 回答
0

你可以用这个和其他一些技巧来实现

 var d_names = [,,,,,"Sunday", "Monday", "Tuesday", 
          "Wednesday", "Thursday", "Friday", "Saturday"];

 alert(d_names[5]); //prints "Sunday"
于 2012-11-04T14:06:00.510 回答