Хотите проверить, имеет ли один массив значение другого массива, и если это так, измените значение первого массива и проверьте его снова - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь проверить, имеет ли один массив значение другого массива, и если это так, значению другого массива должно быть присвоено число рядом с ним. Если есть значение, которое соответствует значению в другом массиве, число должно увеличиваться до тех пор, пока оно не перестанет совпадать со значением в другом массиве. Я борюсь с этим. Любая помощь искренне ценится!

Например, «Джо» показано в приведенном ниже коде в обоих массивах. Это означает, что «Joe» во втором массиве должно быть «Joe1». Поскольку «Joe1» также находится в массиве, «1» в «Joe1» следует затем увеличить до «Joe2». Любая помощь очень ценится!

var arr = [{name:'Bob',num:0},{name:'Joe',num:0},{name:'Alise',num:0}];
var arr2 = [{name:'Frank',num:0},{name:'Joe',num:0},{name:'Jen',num:0},{name:'Joe1',num:0}];
var cnt = 0

arr.forEach(function(element){
  arr2.forEach(function(element2){
    if(element2.name === element.name){
       while(element2.name + element2.num === element.name){
          element2['num'] = ++cnt;
       }
       if(element2.num != 0){
        element2.name += element2.num
       }   
    }
  })
})

console.log(arr2)

1 Ответ

0 голосов
/ 15 февраля 2020

var arr = [{name:'Bob',num:0},{name:'Joe',num:0},{name:'Alise',num:0}];
var arr2 = [{name:'Frank',num:0},{name:'Joe',num:0},{name:'Jen',num:0},{name:'Joe1',num:0}];

var arr3;
arr.forEach(e => {
    arr3 = arr2.map(e2 => {
        var name = e2.name.match(/[a-zA-Z]*/)[0]
        if (e.name === name) {
            var number = e2.name.match(/[0-9]+/)
            if (number) {
                e2.name = name + (+number[0] + 1)
            } else {
                e2.name = name + 1
            }
        }
        return e2 
    })
})
console.log(arr3)
...