如何解决JS:如何用新值替换数组中的重复元素
我有一个看起来像这样的数组:
let arr = ['11','44','66','88','77','00','11','66']
可见,在这个数组中,有那些重复的元素:
- 位置 7 中的“11”
- 位置 6 和 8 中的“66”
我想遍历我的数组,以便找到重复的元素;并将它们从第二次出现替换为指示第一次出现索引的字符串
我的结果数组是这样的:
let newarr = ['11','appears at 2','appears at 0','appears at 2']
正如你可以这样,重复项被替换为这样的字符串:
"出现在 n" 其中 "n" 是第一次出现的索引
解决方法
试试这个:
const appearances = {}
const arr = ['11','44','66','88','77','00','11','66']
const newarr = arr.map((item,index) => {
if (appearances[item] !== undefined) return `appears at ${appearances[item]}`
else {
appearances[item] = index
return item
}
})
console.log("new arr: ",newarr)
对索引和条件运算符的哈希表进行闭包的简短方法
const
array = ['11','66'],result = array.map(
(indices => (v,i) => (indices[v] ??= i) == i ? v : `seen at ${indices[v]}`)
({})
);
console.log(result);
这里有一个两步法:
-
创建一个记录第一次出现的对象
-
使用替换将源数组映射到新数组
let arr = ['11','66'];
// record first occurences
const firsts = arr.reduce((acc,val,index) => {
if (typeof acc[val] === 'undefined') {
acc[val] = index;
}
return acc;
},{});
console.log('firsts:',firsts);
// create array with substitutions
const newarr = arr.map((val,index) => {
return (firsts[val] === index) ? val
: `appears at ${firsts[val]}`
});
console.log(`newarr:`,newarr);
解决方案
let arr = ["11","44","66","88","77","00","11","66"].map(
(value,index,self) => {
if (self.indexOf(value,0) !== index) {
return `appears at ${self.indexOf(value,0)}`;
}
return value;
}
);
console.log(arr);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。