如何在Javascript中将数据添加到二维地图

时间:2016-12-24 05:43:51

标签: javascript multidimensional-array hashmap

我主要使用Java开发,但我现在需要使用JavaScript做一些工作。

我有需要按两个维度分组的数据:首先按性别划分,然后按语言划分。要分组的对象如下:

var items =[ {
  "language":"english",
  "gender":"male",
  ...//twelve other fields
},
...
]

这是我尝试过的:

var myMap = {};
for(var i=0; i<items.length;i++){
  var item = items[i];
  var _gender = item["gender"];
  var _lang = item["language"];
  myMap[_gender][_lang].push[item];
}

我认为上述方法可行,但不起作用。它不断返回此错误:

Uncaught TypeError: Cannot read property 'undefined' of undefined

注意:在Java中,我将创建一个数组映射。

2 个答案:

答案 0 :(得分:0)

你做错了。首先,myMap是object而不是数组,所以你不能使用myMap.push()。 你可以这样做。

var items = {
  "language":"english",
  "gender":"male"
}
var myMap = {};
for(var key in items){
   var myArray = [];
   var _gender = items["gender"];
   var _lang = items["language"];
   myArray.push(_gender);
   myArray.push(_lang);
   myMap.item = myArray;
   console.log(myMap);
}

添加二维数组读取此内容。 2-D Array in javascript

答案 1 :(得分:0)

一个问题:

当您致电myMap[_gender][_lang].push[item];时,您实际在做的是向对象myMap添加一个关键字,其当前值为_gender,并将其转换为对象,然后创建一个新密钥,设置为_lang的值。此外,.push()是与数组一起使用的函数,用于将新项添加到数组的末尾。如果要向Object添加新键和值,您只需调用该键并为其赋值。这是一个例子。

&#13;
&#13;
var obj = {
  ex1 : 'example 1',
  ex2 : 'example 2'
};

console.log(obj);

obj.ex3 = 'example 3';

console.log(obj);

//The code below will simply log 'undefined' in most consoles(it doesn't happen to do so in this snippet).
console.log(obj.ex4);
&#13;
&#13;
&#13;

以下是我的建议(假设我正确理解你要做的事情):

&#13;
&#13;
var items = [{
  "language":"english",
  "gender":"male",
},
//...more below
];

myMap = [];


for(var i = 0; i < items.length; i++){
  myArray = [];
  var item = items[i];
  var _gender = item["gender"];
  var _lang = item["language"];
  myArray.push(_gender);
  myArray.push(_lang);
  myMap.push(myArray);
}
&#13;
&#13;
&#13;