按组在JavaScript数组中创建值序列

按组在JavaScript数组中创建值序列,javascript,foreach,Javascript,Foreach,我找到了关于如何映射数组以为数组中的每个对象创建ID的答案,但我想知道您如何调整此代码以为另一个值的每组创建ID序列: let dataset = [ {value: "a"}, {value: "a"}, {value: "a"}, {value: "b"}, {value: "b"}, {value: "c"}, ] 变成: [ {value: "

我找到了关于如何映射数组以为数组中的每个对象创建ID的答案,但我想知道您如何调整此代码以为另一个值的每组创建ID序列:

let dataset = [
 {value: "a"},
 {value: "a"},
 {value: "a"},
 {value: "b"},
 {value: "b"},
 {value: "c"},
]
变成:

[
 {value: "a", groupid: 1},
 {value: "a", groupid: 2},
 {value: "a", groupid: 3},
 {value: "b", groupid: 1},
 {value: "b", groupid: 2},
 {value: "c", groupid: 1},
]

感谢您的帮助

以下是使用传统for循环的解决方案

var数据=[
{value:“a”},
{value:“a”},
{value:“a”},
{value:“b”},
{value:“b”},
{value:“c”}
]
var-id=1;
var i;
对于(i=0;iforeach()方法对每个数组元素执行一次提供的函数,但返回未定义的(请参阅)。您可以使用map()方法(请参阅)

一个有效的例子是:

let数据集=[{
价值:“a”
},
{
价值:“a”
},
{
价值:“a”
},
{
值:“b”
},
{
值:“b”
},
{
值:“c”
},
];
常量计数器映射=新映射();
让res=dataset.map((val)=>{
const previousGroupId=counterMap.get(val.value);
让groupId;
if(previousGroupId==未定义){
groupId=1;
}否则{
groupId=previousGroupId+1;
}
counterMap.set(val.value,groupId);
返回{
值:val.value,
groupId:groupId
};
});
console.log(res)