You need to enable JavaScript to run this app. PHP的array_unique函数对应的JavaScript原生等价方法是什么?
优惠活动
大模型
产品
解决方案
定价
更多

PHP的array_unique函数对应的JavaScript原生等价方法是什么?

数组去重实现方案

ES6+ 原生极简实现

ES2015(ES6)之后官方提供的Set数据结构天生支持元素唯一性,是目前性能最优、写法最简洁的数组去重方案,完全可以等价实现你需要的PHP array_unique 基础功能,时间复杂度为O(n),远优于双层循环的O(n²)。
Set 基于严格相等(===)做元素对比,针对字符串、数字、布尔值、null、undefined、Symbol 这类基础类型的去重效果和PHP array_unique 默认行为一致,且会保留元素在原数组中第一次出现的顺序,和需求完全匹配。

示例代码:

let fruitBowl = [
  'apple',
  'apple',
  'apple',
  'apple',
  'apple',
  'banana',
  'banana',
  'cherry',
  'cherry',
  'cherry',
  'damson',
  'elderberry',
  'fig',
  'fig'
];
// 一行实现数组去重
const uniqueFruitBowl = [...new Set(fruitBowl)];
// 也可写作 Array.from(new Set(fruitBowl))
console.log(uniqueFruitBowl);

ES5 兼容版本实现

如果需要兼容不支持ES6的旧版环境,可以用哈希表的方式实现单次遍历去重,性能同样远优于双层嵌套循环,不会频繁触发数组重排:

function arrayUnique(arr) {
  var seen = {};
  var result = [];
  for (var i = 0; i < arr.length; i++) {
    var item = arr[i];
    if (!seen[item]) {
      seen[item] = true;
      result.push(item);
    }
  }
  return result;
}

// 调用示例
var uniqueFruitBowl = arrayUnique(fruitBowl);
console.log(uniqueFruitBowl);

特殊场景补充

如果需要对引用类型(比如对象、数组)做去重,需要自定义匹配规则,比如根据对象的指定字段判断重复,可采用如下写法:

// 示例:针对对象数组根据id字段去重
const uniqueArr = arr.filter((item, index, self) => 
  self.findIndex(i => i.id === item.id) === index
);

你当前的双层循环倒序遍历+splice的方式,除了时间复杂度高之外,splice操作会修改原数组,而且每次删除元素都会触发数组重排,额外增加性能消耗,更推荐用上面的方案生成新数组,避免意外修改原数据。

内容的提问来源于stack exchange,提问作者Rounin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 06:54:08