删除数组中重复的连续值

Posted

技术标签:

【中文标题】删除数组中重复的连续值【英文标题】:delete repeating consecutive values in array 【发布时间】:2022-01-23 06:02:00 【问题描述】:

我有一个重复的数组。我正在寻找一种省略重复值的方法,即

[['cream'], ['cake'], ['cheese'], ['bread'], ['cream'], ['cake'], ['cheese'], ['bread'], ['butter']]

变成

[['cream'], ['cake'], ['cheese'], ['bread'], ['butter']]

有什么干净的方法可以做到这一点?

【问题讨论】:

你尝试了什么?所有数组都包含一个元素吗? 我尝试了很多嵌套的 if()。这不是问答网站吗? 使用arr.filter((item, index)=> arr.indexOf(item) === index);)。来源:filter duplicates in arrays - GeeksForGeeks 为什么这个问题被关闭了?在我看来,这个问题非常集中。 @AliasCartellano 这在这里不起作用。 【参考方案1】:

这里有一个班轮:

const data = [['cream'], ['cake'], ['cheese'], ['bread'], ['cream'], ['cake'], ['cheese'], ['bread'], ['butter']];

console.log([...new Set(data.flat())].map(i => [i]))

【讨论】:

【参考方案2】: 定义一个Set 来存储数组元素 使用Array#reduce,遍历列表。在每次迭代中,通过使用Array#join 连接其元素,将当前数组转换为字符串。然后,如果该值尚未在集合中,则将其添加并将当前数组推送到累积列表中。

const arr = [['cream'], ['cake'], ['cheese'], ['bread'], ['cream'], ['cake'], ['cheese'], ['bread'], ['butter']];

const set = new Set();
const res = arr.reduce((list, e) => 
  const val = e.join();
  if(!set.has(val)) 
    set.add(val);
    list.push(e);
  
  return list;
, []);

console.log(res);

【讨论】:

【参考方案3】:

console.log(Object.keys([
  ['cream'],
  ['cake'],
  ['cheese'],
  ['bread'],
  ['cream'],
  ['cake'],
  ['cheese'],
  ['bread'],
  ['butter']
].reduce((acc, val) =>  // map to object
  acc[val] = true
  return acc;
, )).map(key => [key])) // map object back to array

【讨论】:

这个,少粘

以上是关于删除数组中重复的连续值的主要内容,如果未能解决你的问题,请参考以下文章

删除对象数组重复项并将非重复值存储在数组中

根据值数组从数组中删除项目[重复]

从 JS 数组中删除重复值 [重复]

替换 2D numpy 数组中的连续重复项

删除Julia中的连续重复项

从字符数组java中“删除”重复空格