【问题标题】:How to Find the Differences Values Inside Arrays and Log the Index of the Differences如何查找数组内的差异值并记录差异的索引
【发布时间】:2021-04-08 05:12:08
【问题描述】:

祝大家新年快乐!

但是对不起,我想问一个问题,我有一个这样的数组

[ 'even', 'even', 'odd', 'even', 'even' ]

我希望输出会说 3,因为数组内部的差异值是“奇数”并且它位于第三个索引中(索引从 1 开始)

还有,当问题变成

[ 'odd', 'even', 'odd', 'odd', 'odd' ]

输出将得到 2,因为数组内的差异值是“偶数”并且位于第二个索引中

有人可以帮我吗?


我尝试过使用 javaScript 方法映射、for 循环和其他方法,但我不知道如何获取数组的差异值并从中打印索引

谢谢

【问题讨论】:

    标签: javascript arrays sorting indexing


    【解决方案1】:

    您可以在主数组上使用findIndex,并通过比较其索引和lastIndex来检查元素是否唯一

    const findIndexOfUnique =  (arr) => arr.findIndex(x => arr.indexOf(x) === arr.lastIndexOf(x)) + 1
    
    console.log(findIndexOfUnique([ 'even', 'even', 'odd', 'even', 'even' ]))

    标题:

    indexOf 方法从头到尾寻找一个元素。而lastIndexOf 从头到尾都是这样做的。因此,如果元素是唯一的,那么两者的结果将相同,否则它们将不同。

    findIndex() 将函数作为参数并返回满足条件的第一个元素的索引。所以实际上我们是这么说的。查找与条件arr.indexOf(x) === arr.lastIndexOf(x) 匹配的元素的第一个索引。然后我们添加1得到需要的输出

    【讨论】:

      【解决方案2】:

      我还不能发表评论,但想对 Maheers 的回答发表评论,如果您将所有数组条目更改为“偶数”,它会返回 0 而不是 -1,因为您要添加一个。

      最好更新一下:

      function findIndexOfUnique(arr){
          let uniqueIndex = arr.findIndex(x => arr.indexOf(x) === arr.lastIndexOf(x));
          if (uniqueIndex >= 0) uniqueIndex++;
          return uniqueIndex;
      }
      
      console.log(findIndexOfUnique([ 'even', 'even', 'odd', 'even', 'even' ])) // 3
      console.log(findIndexOfUnique([ 'even', 'even', 'even', 'even', 'even' ])) // -1
      

      但是,如果有多个唯一条目怎么办?在这种情况下,它只会返回第一个唯一条目。示例:

      [ 'even', 'even', 'even', 'odd', 'even', 'three', 'even' ]
      

      它应该返回 [ 4, 6 ] 吗?

      function findUniqueIndexes(arr) {
        let uniqueIndexes = [];
        for (let index = 0; index < arr.length; index++) {
          if (index  === arr.lastIndexOf(arr[index]))
            uniqueIndexes.push(index + 1);
          }
        }
        return uniqueIndexes
      }
      

      如果你想进一步扩展:

      function findUniqueIndexes(arr) {
        let uniqueIndexes = [];
        for (let index = 0; index < arr.length; index++) {
          if (index  === arr.lastIndexOf(arr[index]))
            uniqueIndexes.push({"index" : index + 1, value: arr[index]});
          }
        }
        return uniqueIndexes
      }
      

      最后一个会返回:

      [{ index: 4, value: 'odd' }, { index: 6, value: 'three' }]
      

      【讨论】:

      • 先生,您的解释太好了,谢谢。也许它可以帮助其他人。谢谢你,我会投票赞成你的答案
      • 对于您最初提出的问题,我确实喜欢最后一个解决方案!它允许您获取所有唯一条目(如果传递的数组中没有唯一值,则返回的数组将没有条目)。这意味着您可以同时获得 index+1 和每个唯一条目的值。这为您提供了更多信息(无需返回原始数组)来决定下一步要做什么。
      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2017-08-17
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多