首页 > 其他分享 >数组元素全倒排列并去重

数组元素全倒排列并去重

时间:2024-12-11 09:57:18浏览次数:9  
标签:arr Set const 全倒 元素 element 数组 seen uniqueArr

function reverseAndDedup(arr) {
  // Reverse the array
  const reversedArr = arr.slice().reverse();

  // Deduplicate the reversed array
  const uniqueArr = [];
  const seen = new Set();

  for (const element of reversedArr) {
    if (!seen.has(element)) {
      uniqueArr.push(element);
      seen.add(element);
    }
  }

  return uniqueArr;
}



// Example usage:
const originalArray = [1, 2, 2, 3, 4, 4, 5, 1];
const reversedUniqueArray = reverseAndDedup(originalArray);
console.log(reversedUniqueArray); // Output: [1, 5, 4, 3, 2]


//More concise version using Set and spread operator
function reverseAndDedupConcise(arr) {
  return [...new Set(arr.slice().reverse())];
}

const originalArray2 = [1, 2, 2, 3, 4, 4, 5, 1];
const reversedUniqueArray2 = reverseAndDedupConcise(originalArray2);
console.log(reversedUniqueArray2); // Output: [1, 5, 4, 3, 2]



//  If you need to support older browsers that don't have Set, you can use a plain object to achieve the same result:

function reverseAndDedupLegacy(arr) {
  const reversedArr = arr.slice().reverse();
  const uniqueArr = [];
  const seen = {};

  for (let i = 0; i < reversedArr.length; i++) {
    const element = reversedArr[i];
    if (!seen[element]) { // Check if the element is already in 'seen'
      uniqueArr.push(element);
      seen[element] = true; // Mark the element as seen
    }
  }

  return uniqueArr;
}

const originalArray3 = [1, 2, 2, 3, 4, 4, 5, 1];
const reversedUniqueArray3 = reverseAndDedupLegacy(originalArray3);
console.log(reversedUniqueArray3); // Output: [1, 5, 4, 3, 2]

Explanation and Key Improvements:

  1. slice() for Non-Destructive Reversal: The arr.slice().reverse() method creates a copy of the original array before reversing it. This is crucial to avoid modifying the original array, which is generally good practice.

  2. Set for Efficient Deduplication: Using a Set to track seen elements provides efficient deduplication. Set.has() has an average time complexity of O(1), making the overall deduplication process faster than using indexOf or other array-based methods.

  3. Concise Version: The reverseAndDedupConcise function demonstrates a more concise way to achieve the same result using the spread operator (...) and Set.

  4. Legacy Browser Support (Optional): The reverseAndDedupLegacy function shows how to accomplish the same task without using Set, which is important for compatibility with older browsers.

Choosing the right version depends on your target browser compatibility and coding style preferences. The Set-based versions are generally preferred for their conciseness and efficiency. If you need to support very old browsers, the legacy version is a good fallback.

标签:arr,Set,const,全倒,元素,element,数组,seen,uniqueArr
From: https://www.cnblogs.com/ai888/p/18598680

相关文章

  • 给兄弟元素的标签设置红色
    要给一个元素的兄弟元素设置红色,你需要使用CSS结合JavaScript或jQuery。以下提供几种方法:1.使用JavaScript和nextElementSibling/previousElementSibling:这是最直接的方法,适用于给特定元素的下一个或上一个兄弟元素设置样式。//获取目标元素consttargetElement=doc......
  • 如何让pre标签中的元素自动换行?
    要让<pre>标签中的元素自动换行,你可以使用以下几种方法:CSS的white-space:pre-wrap;:这是最推荐和最常用的方法。它保留了空格和换行符,同时允许浏览器在必要时进行自动换行。pre{white-space:pre-wrap;}CSS的white-space:-moz-pre-wrap;和white-space:-o-......
  • 伪类选择器和伪元素选择器有什么区别?
    伪类选择器和伪元素选择器都是用来选择DOM树中不存在的抽象元素或状态,但它们之间有一些关键区别:1.选择的对象不同:伪类选择器:选择的是DOM树中已存在的元素的特定状态,例如鼠标悬停、链接访问状态、表单元素的激活状态等。它并不创建新的元素,只是根据元素的状态来选择它们。......
  • 【Unity 低多边形海盗世界资源包】Pirate Low Poly Pack 提供了丰富的海盗相关资产,包
    PirateLowPolyPack是一款专为Unity开发的低多边形风格资源包,旨在为开发者提供海盗主题的游戏元素,帮助创建充满冒险和海上战斗气息的游戏世界。该插件提供了丰富的海盗相关资产,包括角色、船只、岛屿、道具和环境元素等,适用于多种类型的游戏,如动作冒险、角色扮演、策略类......
  • 为什么代码中两个`display`属性为`inline-block`的元素之间有多余字符(包括换行、制表
    display:inline-block元素之间的空隙是由HTML源代码中的空格、换行符和制表符引起的。浏览器会将这些空白字符渲染成一个空格,就像普通的文本一样。由于inline-block元素像行内元素一样排列,它们之间的空格也会被保留并显示出来。解决方案:移除HTML源代码中的空白字符:......
  • 善于运用指针--通过指针引用数组
    一个数组包含若干个元素,每个元素在内存中占用储存单元,它们都有相应的地址,指针变量能指向变量,也可以指向地址。所谓数组元素的地址,也就是数组元素的指针。文章目录前言一、在引用数组元素时指针的运算二、通过指针引用数组元素三、用数组名作函数参数1用指针打印数组2.指......
  • JPA 自动处理数组字段
    //@ElementCollection//@CollectionTable(name="specification_vote_task_reviewer",joinColumns=@JoinColumn(name="vote_task_id"))@Convert(converter=IntegerListConverter.class)@Column(nullable=true,columnDefini......
  • 从 动态前缀和 到 树状数组
    一.引言——动态前缀和前缀和求解我会在最后给出,想看的直接翻到最后,这里默认大家都知道前缀和怎么求解。有这么一个场景,我们需要不断修改数组中的元素,并且问我们数组内某个区间的和。如果使用最原始的前缀和来求解,每次我们都要重新求一遍sum[],更新时间复杂度是O(n)的,查询是O(1)的......
  • 树状数组进阶
    树状数组是众多数据结构中常数较小,简单好写的,很多ds题都应该优先考虑树状数组。接下来介绍树状数组的几种常见套路。单点加,区间求和区间加,单点查询区间加,区间求和二维树状数组,包括上面\(3\)个操作单点修改,求全局\(k\)小值求前驱,后继,排名等平衡树操作......
  • leetcode 2779. 数组的最大美丽值
    2779.数组的最大美丽值暴力超时解......