如何存储键值

时间:2018-07-08 12:29:45

标签: javascript

我有元素数组

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

3 个答案:

答案 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'])