Javascript 将包含字符串的数组转换为键值对

Javascript 将包含字符串的数组转换为键值对,javascript,arrays,regex,string,maps,Javascript,Arrays,Regex,String,Maps,我有一个字符串“101-2000-10-102-2000-15”,我必须将其映射为键:101个值:{2000,10}。 使用下面的代码,我可以得到101=>2000的输出,但是我无法得到剩余的一个值。 代码如下: let myString = "101-2000-10-102-2000-15" let strArray = myString.match(/[^-]+-[^-]+-[^-]+/g); console.log(strArray); let compartmentMap = new M

我有一个字符串“101-2000-10-102-2000-15”,我必须将其映射为键:101个值:{2000,10}。 使用下面的代码,我可以得到101=>2000的输出,但是我无法得到剩余的一个值。 代码如下:

let myString = "101-2000-10-102-2000-15"
let strArray = myString.match(/[^-]+-[^-]+-[^-]+/g);
console.log(strArray);
let compartmentMap = new Map(strArray.map(x => x.split("-")));
console.log(compartmentMap);
我的意见:“101-2000-10-102-2000-15”
所需的输出:{101=>{2000,10},102=>{2000,15}

您还需要获得一个值数组

let myString=“101-2000-10-102-2000-15”
让strArray=myString.match(/[^-]+-[^-]+-[^-]+-[^-]+/g);
控制台日志(strArray);
让隔间映射=新映射(strArray.Map(x=>{
常数[k,…v]=x.split(“-”);
返回[k,v];
}));

log(Array.from(分隔图))我想我对这件事会相当平庸:

const result = new Map();
const rex = /(\d+)-(\d+)-(\d+)/g;
let match;
while ((match = rex.exec(myString)) !== null) {
    result.set(match[1], [match[2], match[3]]);
}
假设您希望
2000,10
部分作为一个数组

实例:

const myString=“101-2000-10-102-2000-15” const result=新映射(); 常数rex=/(\d+)-(\d+)-(\d+)/g; 让我们比赛; while((match=rex.exec(myString))!==null){ 结果集(匹配[1],[match[2],match[3]]; }
log([…result.entries()])一种方法是只拆分字符串,然后对每三个元素执行
reduce()
操作:

const s='101-2000-10-102-2000-15';
const result=s.split('-')。reduce((r,v,i,a)=>
i%3?r:{…r[v]:a.slice(i+1,i+3)},{};

控制台日志(结果)对代码进行细微更改,请使用
减少
而不是
映射

let myString=“101-2000-10-102-2000-15”;
让strArray=myString.match(/[^-]+-[^-]+-[^-]+-[^-]+/g);
控制台日志(strArray);
让隔间地图=strArray.reduce((acc,curr)=>{
常数[a,b,c]=当前拆分(“-”);
返回Object.assign(acc,{[a]:[b,c]});
}, {});

控制台日志(隔间地图)实际上,我想出了一个更好的方法,它给出了一个带有精确键值对的映射。我所需要的就是传递一个映射和我的数组给它,然后它将带键值的映射吐出

const myString = '101-2000-10-102-2000-15';
let strArray = myString.match(/[^-]+-[^-]+-[^-]+/g);
console.log(strArray);
const compartmentMap = (someMap, someArray) => (someArray.map(x => { console.log(x)
const [a, b, c] = x.split("-");
someMap.set(a, {b,c});
}));
const x = new Map();
compartmentMap(x, strArray);
console.log(x);