JavaScript对象中的数组?

Mot*_*tie 47 javascript

我试过看看这是否可行,但我找不到答案.

我正在努力让以下工作:

var defaults = {
 'background-color': '#000',
 color: '#fff',
 weekdays: {['sun','mon','tue','wed','thu','fri','sat']}
};
Run Code Online (Sandbox Code Playgroud)

它只是给出了一个错误,我尝试过使用({...}),[{...}]我希望能够使用以下内容访问工作日:

defaults.weekdays[0];
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ste*_*all 93

杀掉牙箍.

var defaults = {
 backgroundcolor: '#000',
 color: '#fff',
 weekdays: ['sun','mon','tue','wed','thu','fri','sat']
};
Run Code Online (Sandbox Code Playgroud)

  • @stefan IE6也;) (8认同)
  • ......而且只有IE7 :( (5认同)
  • 还要确保最后一个 ] 结束后没有尾随逗号,否则您的代码将在 IE7 中中断。 (2认同)

Eim*_*tas 11

// define
var foo = {
  bar: ['foo', 'bar', 'baz']
};

// access
foo.bar[2]; // will give you 'baz'
Run Code Online (Sandbox Code Playgroud)

  • 你能做var foo = {bar:[]}然后说foo.bar [7] ='hi'; 就像你可以在它外面的一个物体? (2认同)

小智 5

var data = {
  name: "Ankit",
  age: 24,
  workingDay: ["Mon", "Tue", "Wed", "Thu", "Fri"]
};

for (const key in data) {
  if (data.hasOwnProperty(key)) {
    const element = data[key];
      console.log(key+": ", element);
  }
}
Run Code Online (Sandbox Code Playgroud)


And*_*and 5

如果你是这样组织的,你可以从一开始就声明整个对象(这个逗号分隔的列表称为对象初始值设定项):

const myObject = {
    string:     'Galactic Rainbows',
    color:      'HotPink',
    sociopaths: [ "Hitler", "Stalin", "Gates" ]
}
Run Code Online (Sandbox Code Playgroud)

或者,一旦声明了该对象,

  // this line is the declaration:
const myObject = {};  
  // it is equivalent to:
const myObject2 = new Object();
Run Code Online (Sandbox Code Playgroud)

您可以通过给它们值来定义其属性:

myObject.string     = "Galactic Rainbows";
myObject.color      = "HotPink";
myObject.sociopaths = [ "Hitler", "Stalin", "Gates" ];
     //  ^properties  ^values        
Run Code Online (Sandbox Code Playgroud)

下面的所有示例都假设该对象已经声明(如上所述)

我更喜欢像这样单独声明数组,然后将其分配给对象:

const weekdays    = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];
myObject.weekdays = weekdays;
myObject.weekdays[0] 
               // => 'sun'
Run Code Online (Sandbox Code Playgroud)

但如果您已经声明了该对象,则编码会更快:

myObject.weekdays = [ 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' ];
Run Code Online (Sandbox Code Playgroud)

但是你不能像这样将数组的数组分配给对象:

myObject.girlsAndBoys[0] = [ "John", "Frank", "Tom"   ];   //Uncaught TypeError: Cannot set property '1' of undefined
myObject.girtsAndBoys[1] = [ "Jill", "Sarah", "Sally" ];   //Uncaught TypeError: Cannot set property '1' of undefined
Run Code Online (Sandbox Code Playgroud)

要将二维数组分配给对象,您有几个选择。您可以先初始化空的二维数组:

myObject.girlsAndBoys    = [[]];
myObject.girlsAndBoys[0] = [ "John", "Frank", "Tom"   ]; 
myObject.girtsAndBoys[1] = [ "Jill", "Sarah", "Sally" ];   
Run Code Online (Sandbox Code Playgroud)

或者你可以一层一层地做:

const boys            = [ "John", "Frank", "Tom"   ];    
const girls           = [ "Jill", "Sarah", "Sally" ];
myObject.girlsAndBoys = [[ boys ],[ girls ]];
Run Code Online (Sandbox Code Playgroud)

或者,您可以一次完成所有操作(不超过对象声明之后):

const myObject              = {};
myObject.girlsAndBoys       = [[ "John", "Frank", "Tom"   ],
                               [ "Jill", "Sarah", "Sally" ]];
myObject.girlsAndBoys[0][0] == "John";   // returns True
Run Code Online (Sandbox Code Playgroud)