求教!js二维数组中,如何把具有相同种类name的值筛选出来,组成三维数组

具体这样的,比如var college = [[{name:'北京'}, {city:'西安'}],
[{name:'上海'},{city:'包头'}],
[{name:'广州'},{city:'福州'}],
[{name:'北京'},{city:'广州'}],
[{name:'广州'},{city:'太原'}],
[{name:'上海'},{city:'昆明'}]];
要得到这种:
[[
[{name:'北京'}, {city:'西安'}],
[{name:'北京'}, {city:'广州'}]
],
[
[{name:'上海'},{city:'包头'}],
[{name:'上海'},{city:'昆明'}]
],
[
[{name:'广州'},{city:'福州'}],
[{name:'广州'},{city:'太原'}]
]];

var college = [
[{name:'北京'}, {city:'西安'}],
[{name:'上海'},{city:'包头'}],
[{name:'广州'},{city:'福州'}],
[{name:'北京'},{city:'广州'}],
[{name:'广州'},{city:'太原'}],
[{name:'上海'},{city:'昆明'}]
];

//先用map结构记录
function arrayToMap(data) {
//非数组或数据长度为0不处理
if(!data instanceof Array || data.length == 0) {
return {};
}
var map = {};
for(var i=0;i<data.length;i++) {
if(!data[i] instanceof Array || data.length < 2) {
continue;
}

var name = data[i][0].name;
if(name != undefined) {
 if(map[name] == undefined) {
 map[name] = [];
 }
map[name].push(data[i]);
}
}
return map;
}

//把map转成数组
function mapToArray(data) {
if(data == undefined) {
return [];
}
var array = [];
for(p in data) {
array.push(data[p]);
}
return array;
}

//测试
var map = arrayToMap(college);
var array = mapToArray(map);
console.log(array);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-11
function merge(college) {
var res = [],
c = [];
Array.prototype.forEach.call(college, function(item) {
var i = c.indexOf(item[0].name);
if (i < 0) {
c.push(item[0].name);
var a = [];
a.push(item);
res.push(a);
} else {
res[i].push(item);
}
});
return res;
}

var res = merge(college);
res.forEach(function(row) {
console.log(row);
})

相似回答