【问题标题】:JS : How to replace duplicated elements in array with new valuesJS:如何用新值替换数组中的重复元素
【发布时间】:2021-04-16 19:55:30
【问题描述】:

我有一个如下所示的数组:

let arr = ['11','44','66','88','77','00','66','11','66']

可见,在这个数组中,有那些重复的元素:

  • '11' 在位置 7
  • '66' 在位置 6 和 8

我想遍历我的数组,以便找到重复的元素;并将它们从第二次出现替换为指示第一次出现索引的字符串

我的结果数组会这样:

let newarr = ['11','44','66','88','77','00','appears at 2','appears at 0','appears at 2']

你可以这样将重复的部分替换为这样的字符串:

"出现在 n" 其中 "n" 是第一次出现的索引

【问题讨论】:

  • 什么不起作用 - 实际上?
  • 请添加您尝试过的代码
  • 请不要向标签发送垃圾邮件;您的目标是支持 ES5 或支持 ES6 的浏览器,或者您依赖 TypeScript 为您进行转换,在这种情况下,两个标签都不是必需的。

标签: javascript typescript ecmascript-6 ecmascript-5


【解决方案1】:

对索引和条件运算符的哈希表进行闭包的简短方法

const
    array = ['11', '44', '66', '88', '77', '00', '66', '11', '66'],
    result = array.map(
        (indices => (v, i) => (indices[v] ??= i) == i ? v : `seen at ${indices[v]}`)
        ({})
    );

console.log(result);

【讨论】:

    【解决方案2】:

    解决方案

    let arr = ["11", "44", "66", "88", "77", "00", "66", "11", "66"].map(
      (value, index, self) => {
        if (self.indexOf(value, 0) !== index) {
          return `appears at ${self.indexOf(value, 0)}`;
        }
        return value;
      }
    );
    console.log(arr);

    【讨论】:

      【解决方案3】:

      这是一个两步法:

      1. 创建一个记录第一次出现的对象

      2. 使用替换将源数组映射到新数组

      let arr = ['11', '44', '66', '88', '77', '00', '66', '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);

      【讨论】:

        【解决方案4】:

        试试这个:

        const appearances = {}
        const arr = ['11','44','66','88','77','00','66','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)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-30
          • 1970-01-01
          • 1970-01-01
          • 2019-01-11
          • 1970-01-01
          • 2018-03-30
          • 2014-10-16
          • 1970-01-01
          相关资源
          最近更新 更多