let arr = [1, 2, 3, 2, 3, 4]
. Надо узнать, равны ли его элементы между собой или нет и если есть равные элементы, то заменить их на х
. Например, 1
и 4
уникальны и потому остаются, а 2
и 3
повторяются, и их меняем на х
. const arr = [1, 2, 3, 2, 3, 4];
const replaceTheSameElementsToX = array => {
const result = [];
let coincidence = 0;
for(let i = 0; i < array.length; i++) {
array.map(el => el === array[i] ? coincidence++ : coincidence);
if (coincidence === 1) {
result.push(array[i]);
} else if (coincidence > 1) {
result.push('x');
}
coincidence = 0;
}
return result;
}
replaceTheSameElementsToX(arr); // [1, "x", "x", "x", "x", 4]
const arr = [1,2,3,2,3,4];
const findTheSameNumbers2 = array => array.map((elementOfBaseArray,i,baseArray) => baseArray.reduce((coincidence, currentValue, index, elementAsArray) => elementOfBaseArray === elementAsArray[index] ? coincidence + 1 : coincidence, 0) === 1 ? elementOfBaseArray : 'x');
findTheSameNumbers2(arr); // [1, "x", "x", "x", "x", 4]
const count = arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {});
const newArr = arr.map(n => count[n] > 1 ? newValue : n);
// или
const newArr = arr.map(function(n) {
return this.get(n) ? newValue : n;
}, arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map));
// или
const newArr = arr.map((n, i, a) => a.indexOf(n) !== a.lastIndexOf(n) ? newValue : n);
arr.forEach(function(n, i, a) {
a[i] = this.get(n) > 1 ? newValue : n;
}, arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map));
// или
const duplicates = arr.reduce((acc, n) => (acc[n] = acc.hasOwnProperty(n), acc), {});
arr.splice(0, arr.length, ...arr.map(n => duplicates[n] ? newValue : n));
// или
Object
.values(arr.reduce((acc, n, i) => ((acc[n] ??= []).push(i), acc), {}))
.forEach(n => n.length > 1 && n.forEach(i => arr[i] = newValue));