How to declare nested objects in JavaScript?

2019-02-24 09:42发布

I'm trying to create an object that contains an object, so think of it as a dictionary:

var dictionaries = {};
dictionaries.english_to_french =
{
 {english:"hello",french:"bonjour"},
 {english:"i want",french:"je veux"},
 {english:"bla",french:"le bla"}
};

but it gives the error Uncaught SyntaxError: Unexpected token { what am I doing wrong?

Thanks !

Edit

I'm sorry that I did not clarify what I want to do. Edited the code above.

2条回答
萌系小妹纸
2楼-- · 2019-02-24 10:12

You're trying to give your object a property, and that property will be a single object:

dictionaries.english_to_french =
  {english:"hello",french:"bonjour"}
;

You don't need the extra { }. You could declare the whole thing at once:

var dictionaries = {
  english_to_french: {
    english: "hello", french: "bonjour"
  }
};

I would suggest that a better format for your dictionaries might be:

var dictionaries = {
  english_to_french: {
    "hello": "bonjour",
    "chicken": "poulet", // ? something like that
    "Englishman": "rosbif"
  }
};

That way you can look up words directly without having to search. You could then create the reverse dictionary from that:

dictionaries.french_to_english = function(dict) {
  var rv = {};
  for (var eword in dict)
    rv[dict[eword]] = eword;
  return rv;
}(dictionaries.english_to_french);
查看更多
一夜七次
3楼-- · 2019-02-24 10:35

In order to nest two or more objects, the objects need to have an attribute assigned to them. For example,

{
    "hello":{
        "english":"hello",
        "french":"bonjour",
        "portuguese":"ola"
    },
    "good day":{...},
    "how are you":{...}
}

"hello" at the beginning of the object would be the attribute. Then the object is its value. So that way you can access the object by accessing its attribute. Just putting an object in an object does not work. That's why you're getting your error.

查看更多
登录 后发表回答