返回

数组去重实现类似ElementUI穿梭框

前端

前言

最近在项目开发中使用到了一个类似穿梭框的操作,再次记录下。主要的功能就是讲左边表格里面的数据通过筛选后放到右边表格,右边表格通过操作后进行相应的处理。之前在ElementUI官网和一些博客上面都有看到过使用ElementUI的穿梭框实现的功能,感觉比较符合需求,但是根据自己项目的需求,还是自己实现了一个数组去重的算法。

数组去重算法

数组去重算法是一种用来去除数组中重复元素的算法。最简单的数组去重算法是使用两个循环,第一个循环遍历数组,第二个循环遍历数组中每个元素,如果找到一个重复的元素,则将其从数组中删除。

function removeDuplicates(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

上面的算法时间复杂度为O(n^2),其中n是数组的长度。

还有一种更快的数组去重算法是使用哈希表。哈希表是一种数据结构,它可以将元素映射到一个键。使用哈希表可以将数组中的元素映射到一个键,然后使用哈希表来检查元素是否重复。如果一个元素已经在哈希表中,则说明它是重复的,可以将其从数组中删除。

function removeDuplicates(arr) {
  const hashTable = {};
  const uniqueArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!hashTable[arr[i]]) {
      hashTable[arr[i]] = true;
      uniqueArr.push(arr[i]);
    }
  }
  return uniqueArr;
}

上面的算法时间复杂度为O(n),其中n是数组的长度。

穿梭框组件

穿梭框组件是一个常见的前端组件,它允许用户在两个列表之间移动数据。穿梭框组件通常由两个列表和一个按钮组成。用户可以将数据从左边列表拖动到右边列表,也可以将数据从右边列表拖动到左边列表。

<div class="shuttle-box">
  <div class="left-list">
    <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </ul>
  </div>
  <div class="right-list">
    <ul>
      <li>Item 4</li>
      <li>Item 5</li>
      <li>Item 6</li>
    </ul>
  </div>
  <div class="button-container">
    <button class="add-button">+</button>
    <button class="remove-button">-</button>
  </div>
</div>
const shuttleBox = document.querySelector('.shuttle-box');
const leftList = shuttleBox.querySelector('.left-list');
const rightList = shuttleBox.querySelector('.right-list');
const addButton = shuttleBox.querySelector('.add-button');
const removeButton = shuttleBox.querySelector('.remove-button');

addButton.addEventListener('click', () => {
  const selectedItems = leftList.querySelectorAll('li.selected');
  selectedItems.forEach((item) => {
    rightList.appendChild(item);
  });
});

removeButton.addEventListener('click', () => {
  const selectedItems = rightList.querySelectorAll('li.selected');
  selectedItems.forEach((item) => {
    leftList.appendChild(item);
  });
});

leftList.addEventListener('click', (e) => {
  const target = e.target;
  if (target.tagName === 'LI') {
    target.classList.toggle('selected');
  }
});

rightList.addEventListener('click', (e) => {
  const target = e.target;
  if (target.tagName === 'LI') {
    target.classList.toggle('selected');
  }
});

上面的代码实现了穿梭框组件的基本功能。用户可以将数据从左边列表拖动到右边列表,也可以将数据从右边列表拖动到左边列表。

结语

本文介绍了如何使用数组去重算法实现类似ElementUI穿梭框的功能。穿梭框组件是一个常见的前端组件,它允许用户在两个列表之间移动数据。本文详细介绍了如何使用JavaScript实现数组去重算法,以及如何将其应用于穿梭框组件。