如何在Javascript中向2D地图添加数据

3

我主要使用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中,我将创建一个数组的映射。

抱歉造成困惑。items实际上是一个数组。它作为来自REST API的响应以数组形式出现。 - Katedral Pillon
你想要什么。给我一个例子。 - Durgpal Singh
2个回答

0

一个问题:

当你调用myMap[_gender][_lang].push[item];时,实际上你正在向对象myMap添加一个键,该键的当前值为_gender,并将其转换为一个对象,然后为其创建一个新的键,并将其设置为_lang的值。此外,.push()是一个与数组一起使用的函数,用于将新项添加到数组的末尾。如果您想向对象添加新的键和值,您只需要调用该键并分配一个值即可。以下是一个例子。

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);

这是我的建议(假设我正确理解了你想要做的事情):

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);
}


0

你做错了。首先,myMap是一个对象而不是数组,所以你不能使用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数组,请阅读此内容。JavaScript中的2-D数组


谢谢回复。我将进行测试。但仅凭外观,您的代码似乎是一个映射数组,而我需要的是一个数组映射。也就是说,一个映射,其中每个键都有一个项目数组作为值。 - Katedral Pillon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接