5 回答
TA贡献1794条经验 获得超8个赞
let idx = 0;
arr.map((item, i) => {
if(i == 0 || arr[i].ModuleID != arr[i-1].ModuleID)
idx = 0;
else
idx++;
item['index'] = idx;
});
TA贡献1866条经验 获得超5个赞
您可以采用哈希表作为分组索引。
var array = [{ ModuleID: 'one', ModuleValue: 'valueX' }, { ModuleID: 'one', ModuleValue: 'valueV' }, { ModuleID: 'one', ModuleValue: 'valueE' }, { ModuleID: 'one', ModuleValue: 'valueY' }, { ModuleID: 'two', ModuleValue: 'valueZ' }, { ModuleID: 'two', ModuleValue: 'valueB' }, { ModuleID: 'two', ModuleValue: 'valueA' }],
result = array.map(
(c => o => ({ ...o, index: (c[o.ModuleID] ??= 0, c[o.ModuleID]++) }))
({})
);
console.log(result);
TA贡献1911条经验 获得超7个赞
只需循环遍历数组并检查 的值,ModuleID并根据该值添加一个index属性,该属性的值是两个可能的计数器之一的值,然后递增。if/then 逻辑可以做得更紧凑,但我在这里使用的是以防稍后添加也需要检查的switch其他值。ModuleID
var arr1 = [
{ ModuleID : 'one', ModuleValue : 'valueX'},
{ ModuleID : 'one', ModuleValue : 'valueV'},
{ ModuleID : 'one', ModuleValue : 'valueE'},
{ ModuleID : 'one', ModuleValue : 'valueY'},
{ ModuleID : 'two', ModuleValue : 'valueZ'},
{ ModuleID : 'two', ModuleValue : 'valueB'},
{ ModuleID : 'two', ModuleValue : 'valueA'}
];
let a = 0;
let b = 0;
arr1.forEach(function(obj){
switch (obj.ModuleID) {
case "one":
obj.index = a++;
break;
case "two":
obj.index = b++;
break;
}
});
console.log(arr1);
TA贡献1784条经验 获得超2个赞
var arr2 = [];
var index = 0;
var transition = false;
for (var i = 0; i < arr1.length; ++i) {
if (i < arr1.length && arr1[i].ModuleID = arr1[i+1].ModuleID ) {
index = index + 1;
} else {
transition = true;index = index + 1;
};
arr2.push({ModuleID: arr1[i].ModuleID, ModuleValue: arr1[i].ModuleValue, index: index});
if(transition){
index=0;
transition = false;
}
};
TA贡献1875条经验 获得超5个赞
那是你想做的吗?
var arr1 = [
{ModuleID: 'one', ModuleValue: 'valueX'},
{ModuleID: 'one', ModuleValue: 'valueV'},
{ModuleID: 'one', ModuleValue: 'valueE'},
{ModuleID: 'one', ModuleValue: 'valueY'},
{ModuleID: 'two', ModuleValue: 'valueZ'},
{ModuleID: 'two', ModuleValue: 'valueB'},
{ModuleID: 'two', ModuleValue: 'valueA'}
];
function setIndex (item, idx) {
arr1 [idx] .index = idx + 1
}
arr1.forEach (setIndex)
console.log ("code changed")
console.log (arr1)
这是生成的结果
[
{
"ModuleID": "one",
"ModuleValue": "valueX",
"index": 1
},
{
"ModuleID": "one",
"ModuleValue": "valueV",
"index": 2
},
{
"ModuleID": "one",
"ModuleValue": "valueE",
"index": 3
},
{
"ModuleID": "one",
"ModuleValue": "valueY",
"index": 4
},
{
"ModuleID": "two",
"ModuleValue": "valueZ",
"index": 5
},
{
"ModuleID": "two",
"ModuleValue": "valueB",
"index": 6
},
{
"ModuleID": "two",
"ModuleValue": "valueA",
"index": 7
}
]
添加回答
举报