3 回答

TA貢獻1820條經驗 獲得超10個贊
您可以采用單循環方法,為下一個映射提供替換值。這種方法只接受數字,但如果需要,您可以將所有值轉換為數字
對于任何重復的數字,它從對象中獲取增加的值。
1, 5, 2, 1, 4, 1, 9, 1, 2
1 2 3 4
2 3
const
array = [1, 5, 2, 1, 4, 1, 9, 1, 2],
values = {},
result = array.map(v => v in values ? ++values[v] : (values[v] = v));
console.log(...result);

TA貢獻1820條經驗 獲得超2個贊
let arr = ["1", "5", "2", "1", "4", "1", "9", "1", "2"];
let flag = {};
let ret = arr.map((x) => {
x = +x;
if (!flag[x]) {
flag[x] = x;
return x;
} else {
flag[x] += 1;
return flag[x];
}
}).map(x => x + "");
console.log(ret);

TA貢獻1836條經驗 獲得超13個贊
使用Array.prototype.reduce,您可以獲得數組的重復索引信息input。
它將被獲取為這種格式。
{
1: [0, 3, 5, 7],
9: [2], ...
}
// Values are the duplicated index position.
根據該信息,您可以使用Array.splice如下函數替換該索引上具有 2 個以上重復項的數據。
const input = [ '1', '5', '2', '1', '4', '1', '9', '1', '2' ];
const duplicates = input.reduce((acc, curV, curI) => {
acc[curV] ? acc[curV].push(curI) : acc[curV] = [curI];
return acc;
}, {});
let output = [ ...input ];
Object.entries(duplicates).forEach(([ key, value ]) => {
if (value.length > 1) {
for (let index = 1; index < value.length; index ++) {
output.splice(value[index], 1, (parseInt(key) + index).toString());
}
}
});
console.log(output);
添加回答
舉報