【问题标题】:Delete all equal items from array从数组中删除所有相等的项目
【发布时间】:2021-05-28 14:31:27
【问题描述】:

我的反应应用程序中有下一个情况:
我有一个状态:

const [arr1, setArr1] = useState([1, 2, 3, 5, 1, 3]);

下面我在 UI 上渲染数组中的所有项目,例如:

arr1.map(i => <li>{i}</li>)

现在我想删除 所有 数组中相等的项目:
例如:

  1. [1, 2, 3, 5, 1, 3] // 应该删除 1 和 3 结果:[1, 2, 5]
  2. [1, 2, 3, 5, 3] // 应该删除 3 结果:[1, 2, 5]
    删除所有项目时,状态也应在此处更改arr1.map()
    我试过setArr1([new Set(arr1)]),但它不会删除所有重复的值,它只会删除其中一个。
    如何实现我上面描述的?

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

您可以计算频率,如果频率大于1,则删除数字。codesandbox

    function removeDuplicates(arr) {
    const frequency = {};
    arr.forEach((el) => {
      frequency[el] = frequency[el] ? ++frequency[el] : 1;
    });

    const result = [];
    for (el in frequency) {
      if (frequency[el] === 1) {
        result.push(el);
      }
    }

    return result;
 }
  

    const arrayWithoutDuplicates = removeDuplicates(arr1);
      return (
        <ul>
          {arrayWithoutDuplicates.map((el) => {
            return <li key={el}> {el} </li>;
          })}
        </ul>
      );

【讨论】:

  • 我需要删除两个重复值。
  • @Asking 更新,检查这是否是您需要的代码
  • 你能看看这个吗,stackoverflow.com/questions/66381227/…。我不知道如何解决这个问题。谢谢
【解决方案2】:

你可以统计数字的频率,然后选择频率为1的数字。

const arr = [1, 2, 3, 5, 1, 3],
      frequency = arr.reduce((o,v) => (o[v] = (o[v] || 0) + 1, o), {}),
      unique = Object.keys(frequency).reduce((r,k) => frequency[k] === 1? [...r, +k]: r, []);
console.log(unique);

【讨论】:

【解决方案3】:

下面是使用过滤器的单线

const arr = [1, 2, 3, 5, 1, 3];

const unique = arr.filter(x => arr.filter(y => y === x).length < 2)
console.log(unique);

【讨论】:

  • 您的解决方案的时间复杂度为 O(n^2)。 @Hassan Imam 的解决方案的复杂度仅为 O(2n)。他的解决方案更加优化
【解决方案4】:

检查元素上的第一个索引是否等于最后一个索引,当它们相等时表示它是唯一的:

let result = []
let arr = [1, 2, 3, 5, 1, 3]

arr.forEach(e => arr.indexOf(e) === arr.lastIndexOf(e)?result.push(e):null)

console.log(result)

【讨论】:

  • 另一个问题是什么或与这个问题有关?
  • 这是另一个,但我认为这个想法可能与此有关。我解决不了。你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2017-09-10
  • 1970-01-01
相关资源
最近更新 更多