我有一个元素数组
mapa = new Map();
someArray = ["5 5", "5 6", "5 12", "4 12"];
grupByRow() {
for (let i = 0; i < this.someArray.length; i++) {
const key = this.someArray[i].split(' ')[0];
const value = this.someArray[i].split(' ')[1];
this.mapa.set(key, value);
}
}当我尝试这样做时,值被覆盖为相同的键,是以某种方式存储键和数组值键=> 5,=> 5,6,12;
发布于 2018-07-08 20:32:35
您必须在每个Map条目中存储一个数组:
for(const entry of someArray) {
const [row, value] = entry.split(" ");
if(mapa.has(row)) {
mapa.get(row).push(value);
} else {
mapa.set(row, [value]);
}
}发布于 2018-07-08 21:00:38
JavaScript@Wojciech,您也可以尝试使用的对象来完成此任务,如下所示。
样本输出
{
"4": [
"12"
],
"5": [
"5",
"6",
"12"
]
}代码
var someArray = ["5 5", "5 6", "5 12", "4 12"];
var obj = {}
for(var i=0; i<someArray.length; i++) {
numbers = someArray[i].split(/\s+/) // regular expression technique for multiple spaces
if(obj[numbers[0]] === undefined)
obj[numbers[0]] = [numbers[1]]
else
obj[numbers[0]].push(numbers[1])
}
console.log(JSON.stringify(obj, null, 4))
/*
{
"4": [
"12"
],
"5": [
"5",
"6",
"12"
]
}
*/
// console.log(obj['4'])
// // [ '12' ]
// console.log(obj['5'])
// // [ '5', '6', '12' ]
发布于 2018-07-08 21:25:51
您可以使用reduce来完成此任务。
var someArray = ["5 5", "5 6", "5 12", "4 12"];
var result = someArray.reduce((all, item) => {
const [key, val] = item.split(' ');
if (!all.has(key)) all.set(key, []);
all.get(key).push(val);
return all;
}, new Map());
console.log(result.get('5'));您也可以对常规对象而不是Map执行相同的操作
var someArray = ["5 5", "5 6", "5 12", "4 12"];
var result = someArray.reduce((all, item) => {
const [key, val] = item.split(' ');
if (!all.hasOwnProperty(key)) all[key] = [];
all[key].push(val);
return all;
}, {});
console.log(result['5'])https://stackoverflow.com/questions/51232010
复制相似问题