Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何替换阵列中的重复对象_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 如何替换阵列中的重复对象

Javascript 如何替换阵列中的重复对象,javascript,arrays,sorting,Javascript,Arrays,Sorting,我知道在javascript中有多种方法可以从数组中删除重复项,我使用的方法是 let originalArray = [1, 2, 3, 4, 1, 2, 3, 4] let uniqueArray = array => [...new Set(array)] console.log(uniqueArray) -> [1, 2, 3, 4] 我想要的是类似的东西,但不是删除重复项,而是用我想要的字符串或数字替换它,就像这样 console.log(uniqueArray) -&g

我知道在javascript中有多种方法可以从数组中删除重复项,我使用的方法是

let originalArray = [1, 2, 3, 4, 1, 2, 3, 4]
let uniqueArray = array => [...new Set(array)]
console.log(uniqueArray) -> [1, 2, 3, 4]
我想要的是类似的东西,但不是删除重复项,而是用我想要的字符串或数字替换它,就像这样

console.log(uniqueArray) -> [1, 2, 3, 4, "-", "-", "-", "-"]
这必须符合任何顺序,比如

[1, 2, 3, 3, 4, 5, 7, 1, 6]
result -> [1, 2, 3, "-", 4, 5, 7, "-", 6]
我测试了这个解决方案

const arr=[1,2,3,1,2,3,2,2,3,4,5,5,12,1,23,4,1];
常量deleteAndInsert=uniqueList=>{
const creds=唯一列表。reduce((acc、val、ind、array)=>{
设{count,res}=acc;
if(array.lastIndexOf(val)==ind){
推力(val);
}否则{
计数++;
};
返回{res,count};
},{count:0,res:[]});
常数{res,count}=creds;
返回res.concat(“”).repeat(count.split(“”);
};

console.log(deleteAndInsert(arr))这是解决问题的一种非常简单的方法:

函数uniqueReplace(arr,rep){
设res=[];
对于(arr的x){
再推(再推包括(x)?代表:x);
}
返回res;
}
log(…uniqueReplace([1,2,3,4,1,2,3,4],'-');

log(…uniqueReplace([1,2,3,3,4,5,7,1,6],'-')您仍然可以使用
集合
并检查该值是否在集合中

const
unique=array=>array.map((s=>v=>!s.has(v)和&s.add(v)?v:'-')(新集合));
log(…唯一([1,2,3,4,1,2,3,4]);

log(…唯一([1,2,3,3,4,5,7,1,6])只需创建新数组,使用1个集合控制出现的元素,如果一个元素出现多于1个,则按一个新字符,如“-”
let originalArray=[1,2,3,4,1,2,3,4];
设newArray=[];
设集合=新集合();
for(设i=0;ilog(newArray)您可以使用
reduce

const dashDupes=array=>array.reduce((acc,e)=>{
如果(根据idx[e])
加速推力('-')
否则{
加速推力(e);
}
acc.idx[e]=真;
返回acc;
},{idx:{},arr:[]}).arr
log(…破折号([1,2,3,4,1,2,3,4]))

console.log(…dashdups([1,2,3,3,4,5,7,1,6]))
就像在您的中一样,它工作得完美无瑕,抱歉@Andreas如果我找不到重复的问题/答案,我会用类似的问题搜索整个stackoverflow,没有results@NicolasSilva抱歉应该是其他人说的,他应该关闭这个复制品,而是只添加了一个已经存在的文件的另一个副本answer@Andreas我测试了这个常量deleteAndInsert=uniqueList=>{const creds=uniqueList.reduce((acc,val,ind,array)=>{let{count,res}=acc;if(array.lastIndexOf(val)==ind){res.push(val);}else{count++;};返回{res,count};},{count:0,res:[]});const{res,count}=creds;返回res.concat(“.”重复(count).split(“”);现在好多了:)