Скажите, что у меня были следующие два массива:
var arrToChangeAndCompare = [{name:'Bob'},{name:'Joe'},{name:'Alise'},{name:'Joe1'}];
var arrToCompare = [{name:'Frank'},{name:'Joe'},{name:'Jen'},{name:'Joe1'}];
И я хочу, чтобы первый массив содержал только уникальные имена в массиве, в который он входит, но также уникальные имена по сравнению со вторым массивом (arrToCompare). Чтобы было ясно, я не хочу УДАЛИТЬ значения, которые не являются уникальными, я хочу ИЗМЕНИТЬ их в «arrToChangeAndCompare», чтобы они были уникальными для обоих массивов. Имейте в виду, что если в arrToCompare есть неуникальные значения, это не имеет значения. Единственное правило заключается в том, что «arrToChangeAndCompare» имеет только уникальные имена в своем массиве, а также уникальные имена по сравнению с «arrToCompare».
У меня есть следующий код, который почти выполняет то, что я хочу, но он не Не проверяйте второй массив еще раз, когда он меняет значение в первом массиве на уникальное, в результате чего массив «arr» будет иметь все уникальные значения, но значения «arr» не являются уникальными в обоих массивах (Joe1 существует в первый массив и второй массив).
ПОЧТИ РАБОЧИЙ КОД
var arr = [{name:'Bob'},{name:'Joe'},{name:'Alise'},{name:'Joe1'}];
var arr2 = [{name:'Frank'},{name:'Joe'},{name:'Jen'},{name:'Joe1'}];
var arr3;
arr2.forEach(e2 => {
arr3 = arr.map(e => {
var name = e.name.match(/[a-zA-Z]*/)[0]
if (e2.name === name) {
var number = e.name.match(/[0-9]+/)
if (number) {
e.name = name + (+number[0] + 1)
} else {
e.name = name + 1
}
}
return e
})
})
console.log(arr3)
Ожидаемый вывод массивов, перечисленных вверху, будет один массив, который выглядит следующим образом:
[
{
"name": "Bob"
},
{
"name": "Joe2"
},
{
"name": "Alise"
},
{
"name": "Joe3"
}
]
ОБЪЯСНЕНИЕ ВЫХОДА
- Боб уникален, поэтому для первого объекта в
arrToChangeAndCompare
фактическое не выполняется - Джо не уникален по сравнению с
arrtoCompare
, поэтому его номер необходимо изменить. Но, поскольку Joe1 существует и в arrToChangeAndCompare
, его необходимо снова увеличить до Joe2 - Alise уникален для обоих массивов, поэтому для третьего объекта в
arrToChangeAndCompare
- Все значения в
arrToChangeAndCompare
являются теперь уникален по сравнению со своим собственным массивом и arrtoCompare
Пожалуйста, задавайте дополнительные вопросы по мере необходимости. Ваша помощь очень ценится!