我有元素数组
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];
答案 0 :(得分:2)
您必须在每个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]);
}
}
答案 1 :(得分:1)
@Wojciech ,您还可以尝试使用JavaScript的对象来完成此任务,如下所示。
样本输出
{
"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' ]
答案 2 :(得分:1)
您可以使用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'])