Javascript JS:如何用新值替换数组中重复的元素
我有一个如下所示的数组:Javascript JS:如何用新值替换数组中重复的元素,javascript,typescript,ecmascript-6,ecmascript-5,Javascript,Typescript,Ecmascript 6,Ecmascript 5,我有一个如下所示的数组: let arr = ['11','44','66','88','77','00','66','11','66'] let newarr = ['11','44','66','88','77','00','appears at 2','appears at 0','appears at 2'] 如图所示,在这个数组中,有一些重复的元素: “11”位于位置7 “66”位于位置6和8 我想迭代我的数组,以便找到重复的元素;并将第二次出现时的索引替换为指示第一次出现索引
let arr = ['11','44','66','88','77','00','66','11','66']
let newarr = ['11','44','66','88','77','00','appears at 2','appears at 0','appears at 2']
如图所示,在这个数组中,有一些重复的元素:
- “11”位于位置7
- “66”位于位置6和8
let arr = ['11','44','66','88','77','00','66','11','66']
let newarr = ['11','44','66','88','77','00','appears at 2','appears at 0','appears at 2']
正如您所能看到的那样,复制内容将替换为如下字符串:
let arr = ['11','44','66','88','77','00','66','11','66']
let newarr = ['11','44','66','88','77','00','appears at 2','appears at 0','appears at 2']
“出现在n”,其中“n”是第一次出现的索引
const外观={}
常数arr=['11'、'44'、'66'、'88'、'77'、'00'、'66'、'11'、'66']
const newarr=arr.map((项目、索引)=>{
如果(外观[项目]!==未定义)返回`出现在${外观[项目]}`
否则{
外观[项目]=索引
退货项目
}
})
log(“new arr:,newarr)
这里有一个两步方法:
让arr=['11','44','66','88','77','00','66','11','66'];
//记录首次发生的事件
常数firsts=arr.reduce((acc、val、index)=>{
if(acc[val]==‘未定义’){
acc[val]=指数;
}
返回acc;
}, {});
log('firsts:',firsts);
//创建带有替换的数组
const newarr=arr.map((val,index)=>{
返回(第一个[val]==索引)?val
:`出现在${firsts[val]}`
});
log(`newarr:`,newarr)代码>解决方案
让arr=[“11”,“44”,“66”,“88”,“77”,“00”,“66”,“11”,“66”](
(值、索引、自身)=>{
if(self.indexOf(value,0)!==索引){
return`出现在${self.indexOf(value,0)}`;
}
返回值;
}
);
控制台日志(arr)代码>索引和条件运算符在哈希表上使用闭包的简短方法
const
数组=['11','44','66','88','77','00','66','11','66'],
结果=array.map(
(索引=>(v,i)=>(索引[v]??=i)=i?v:`见${index[v]}`)
({})
);
控制台日志(结果)代码>什么不起作用-实际上?请添加您尝试过的代码请不要垃圾邮件标签;您的目标是支持ES5或ES6的浏览器,或者依赖TypeScript为您进行传输,在这种情况下,两个标记都不受保证。