【问题标题】:Javascript equivalent of array_unique in PHP [duplicate]PHP中array_unique的Javascript等价物[重复]
【发布时间】:2024-01-14 07:01:02
【问题描述】:

我一直在寻找与 PHP 等效的原生 javascript 函数

$Fruit_Bowl = array_unique($Fruit_Bowl);

我可以自己重新创建它,使用一对嵌套循环:

  • 外循环通过数组倒计时
  • 内部循环检查当前元素是否与我们已有的元素重复

工作示例:

let fruitBowl = [
  'apple',
  'apple',
  'apple',
  'apple',
  'apple',
  'banana',
  'banana',
  'cherry',
  'cherry',
  'cherry',
  'damson',
  'elderberry',
  'fig',
  'fig'
];

for (i = (fruitBowl.length - 1); (i + 1) > 0; i--) {
  for (j = (i + 1); j < fruitBowl.length; j++) {
    if (fruitBowl[j] === fruitBowl[i]) {
      fruitBowl.splice(i, 1);
    }
  }
}

console.log(fruitBowl);

但是,肯定有比这更快、更简洁、更优雅的东西吗?

(也许在较新版本的 javascript 中,如果不是在旧版本中?)

【问题讨论】:

  • 我在 URL 栏中输入了“重复项”,然后从浏览器历史记录中获取了该页面。这是一个很常见的问题,所以我记得标题的一部分,足以在浏览器历史记录中找到它。您也可以通过在搜索引擎中使用“唯一数组 javascript”来找到它。 First result in Google for me
  • 谢谢。很高兴知道。我想我输入了以下变体:“javascript 等效于 PHP 中的 array_unique”,尽管反复搜索,但还是没有运气。

标签: javascript php arrays ecmascript-6 unique-values


【解决方案1】:

[...] 肯定有比这更快、更简洁、更优雅的东西吗?

是的,事实证明确实存在。

我不太熟悉 JavaScript 中的 collections,例如 MapSet,但事实证明,Set 非常明确地代表了一种特殊的 Array,它可能只包含一个元素一次。

因此,将array 转换为set,然后再转换回array

fruitBowl = [... new Set(fruitBowl)];

正是我需要的。

工作示例:

let fruitBowl = [
  'apple',
  'apple',
  'apple',
  'apple',
  'apple',
  'banana',
  'banana',
  'cherry',
  'cherry',
  'cherry',
  'damson',
  'elderberry',
  'fig',
  'fig'
];

fruitBowl = [... new Set(fruitBowl)];

console.log(fruitBowl);

【讨论】:

  • "Set 非常明确地代表了一种特殊的数组,它可能只包含一个元素一次" that's not a JS thing
  • @VLAZ 感谢您的提醒。很高兴知道Sets 不仅仅是 JS 的东西,但我应该提一下,我从未在 PHP、HTML、CSS、SVG、JSON 等中遇到过Sets
  • HTML 是一种标记语言,没有数据结构。 CSS 或 SVG 也没有。 JSON 是一种序列化格式。 There is something called Set in PHP 还提到了其他数据结构,但我不知道这些来自哪里。近十年没有使用 PHP,所以我不知道 Ds\Set 应该是什么。
  • 对。我的意思是,并非所有使用 javascript 的人都具有编程背景。我们中的一些人来自网络/媒体背景。因此,在我们了解它们之前,我们不知道已建立的数据结构(在 Javascript、PHP 或其他任何东西中)。