如果数组中有重复项,我想增加该值。这些是我的控制台日志结果:
this is the map { '1': 1, '2': 1, '3': 1, '4': 2 }
this is the values more than one 4
this is iitem before 4
this is item after 5
this is iitem before 4
this is item after 5
this is the array here [ 1, 4, 2, 3, 4 ]
[ 1, 4, 2, 3, 4 ]
和代码:
const incrementDuplicate = function(value, arr){
for(let item of arr){
if(item.toString() === value.toString()){
console.log('this is iitem before', item);
item = item+1;
console.log('this is item after', item)
}
}
return arr;
}
const uniqueArraySum = function(arr){
let map = {};
let newArray = [];
for(let item of arr){
if(!map[item]){
map[item] = 1;
} else{
map[item]++;
}
}
console.log('this is the map', map);
for(let item in map){
if(map[item] !== 1){
console.log('this is the values more than one', item);
newArray = incrementDuplicate(item, arr);
console.log('this is the array here', arr);
}
}
return newArray;
}
console.log(uniqueArraySum([1,4,2,3,4]));
答案 0 :(得分:1)
我认为您走在正确的道路上,基本上,创建counts
字典/地图的想法是可行的。您只需要在遍历原始数组时引用它,即可查看该元素是否出现多次,因此需要递增:
const incrementDuplicates = arr => {
let countDict = getCountDict(arr)
for (let i = 0; i < arr.length; i++) {
if (countDict[arr[i]] > 1) {
arr[i]++
}
}
return arr
}
const getCountDict = arr => {
let countDict = {}
arr.forEach(val => countDict[val] = (countDict[val] || 0) + 1)
return countDict
}
console.log(incrementDuplicates([1,4,2,3,4]))
答案 1 :(得分:0)
我认为问题在于您试图通过迭代器变量对数组进行变异。如果是原始值,则无法使用,因为JS不支持指针。
所以您应该这样:
for(let i=0; i<arr.length; i++){
if(arr[i].toString() === value.toString()){
console.log('this is item before', arr[i]);
arr[i] = arr[i]+1;
//or even simpler `arr[i]++`
console.log('this is item after', arr[i])
}
}