为了账号安全,请及时绑定邮箱和手机立即绑定

如何将连续的索引号添加到数组中的唯一值

如何将连续的索引号添加到数组中的唯一值

DIEA 2024-01-18 16:26:21
这是我有的一个数组: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'}];我想根据 ModuleID 将连续的“索引”号添加到我的数组中,如下所示:var arr2 = [    { ModuleID : 'one', ModuleValue : 'valueX', index : 0},    { ModuleID : 'one', ModuleValue : 'valueV', index : 1},    { ModuleID : 'one', ModuleValue : 'valueE', index : 2},    { ModuleID : 'one', ModuleValue : 'valueY', index : 3},    { ModuleID : 'two', ModuleValue : 'valueZ', index : 0},    { ModuleID : 'two', ModuleValue : 'valueB', index : 1},    { ModuleID : 'two', ModuleValue : 'valueA', index : 2}];到目前为止,我已经想出了这段代码:var arr2 = [];var index = 0;for (var i = 0; i < arr1.length; ++i) {        if (i < arr1.length && arr1[i].ModuleID = arr1[i+1].ModuleID ) {            index = index + 1;        } else {            index = 0;        };    arr2.push({ModuleID: arr1[i].ModuleID, ModuleValue: arr1[i].ModuleValue, index: index});};但是,它会重置 ModuleID 最后一个值的连续数字,而不是第一个值:var arr2 = [    { ModuleID : 'one', ModuleValue : 'valueX', index : 1},    { ModuleID : 'one', ModuleValue : 'valueV', index : 2},    { ModuleID : 'one', ModuleValue : 'valueE', index : 3},    { ModuleID : 'one', ModuleValue : 'valueY', index : 0},    { ModuleID : 'two', ModuleValue : 'valueZ', index : 1},    { ModuleID : 'two', ModuleValue : 'valueB', index : 2},    { ModuleID : 'two', ModuleValue : 'valueA', index : 3}];我该如何改进我的代码?
查看完整描述

5 回答

?
幕布斯7119047

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; 

});


查看完整回答
反对 回复 2024-01-18
?
心有法竹

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


查看完整回答
反对 回复 2024-01-18
?
Smart猫小萌

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


查看完整回答
反对 回复 2024-01-18
?
一只斗牛犬

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;

}

}; 


查看完整回答
反对 回复 2024-01-18
?
慕田峪4524236

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

  }

]


查看完整回答
反对 回复 2024-01-18
  • 5 回答
  • 0 关注
  • 39 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信