首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从JS数组中删除重复值

从JS数组中删除重复值
EN

Stack Overflow用户
提问于 2012-02-10 06:53:22
回答 53查看 2.7M关注 0票数 2.2K

我有一个非常简单的JavaScript数组,它可能包含或不包含重复项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];

我需要删除副本并将唯一的值放入新的数组中。

我可以指出我尝试过的所有密码,但我认为它是无用的,因为它们不起作用。我也接受jQuery解决方案。

类似的问题:

EN

回答 53

Stack Overflow用户

回答已采纳

发布于 2012-02-10 07:13:22

快速和肮脏地使用jQuery:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
var uniqueNames = [];
$.each(names, function(i, el){
    if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});
票数 511
EN

Stack Overflow用户

发布于 2013-04-07 14:42:08

厌倦了使用for循环或jQuery的所有坏例子。Javascript现在已经有了很好的工具:排序、映射和缩减。

在保持现有订单的同时减少Uniq

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];

var uniq = names.reduce(function(a,b){
    if (a.indexOf(b) < 0 ) a.push(b);
    return a;
  },[]);

console.log(uniq, names) // [ 'Mike', 'Matt', 'Nancy', 'Adam', 'Jenny', 'Carl' ]

// one liner
return names.reduce(function(a,b){if(a.indexOf(b)<0)a.push(b);return a;},[]);

带排序的更快的uniq

也许有更快的方法,但这是相当体面的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var uniq = names.slice() // slice makes copy of array before sorting it
  .sort(function(a,b){
    return a > b;
  })
  .reduce(function(a,b){
    if (a.slice(-1)[0] !== b) a.push(b); // slice(-1)[0] means last item in array without removing it (like .pop())
    return a;
  },[]); // this empty array becomes the starting value for a

// one liner
return names.slice().sort(function(a,b){return a > b}).reduce(function(a,b){if (a.slice(-1)[0] !== b) a.push(b);return a;},[]);

更新2015年: ES6版本:

在ES6中,您有设置和扩展,这使得移除所有重复项变得非常简单和有效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var uniq = [ ...new Set(names) ]; // [ 'Mike', 'Matt', 'Nancy', 'Adam', 'Jenny', 'Carl' ]

基于事件的排序:

有人问到,根据有多少个唯一的名字来排序结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var names = ['Mike', 'Matt', 'Nancy', 'Adam', 'Jenny', 'Nancy', 'Carl']

var uniq = names
  .map((name) => {
    return {count: 1, name: name}
  })
  .reduce((a, b) => {
    a[b.name] = (a[b.name] || 0) + b.count
    return a
  }, {})

var sorted = Object.keys(uniq).sort((a, b) => uniq[a] < uniq[b])

console.log(sorted)
票数 379
EN

Stack Overflow用户

发布于 2012-02-10 07:03:50

Vanilla JS:使用像Set这样的对象删除重复项

您可以尝试将其放入对象中,然后迭代其键:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function remove_duplicates(arr) {
    var obj = {};
    var ret_arr = [];
    for (var i = 0; i < arr.length; i++) {
        obj[arr[i]] = true;
    }
    for (var key in obj) {
        ret_arr.push(key);
    }
    return ret_arr;
}

Vanilla JS:通过跟踪已经看到的值(订单安全)来删除重复的

或者,对于订单安全版本,使用对象存储所有以前看到的值,并在添加到数组之前对其进行检查。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function remove_duplicates_safe(arr) {
    var seen = {};
    var ret_arr = [];
    for (var i = 0; i < arr.length; i++) {
        if (!(arr[i] in seen)) {
            ret_arr.push(arr[i]);
            seen[arr[i]] = true;
        }
    }
    return ret_arr;

}

ECMAScript 6:使用新的Set数据结构(订单安全)

ECMAScript 6添加了新的Set数据结构,它允许存储任何类型的值。Set.values按插入顺序返回元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function remove_duplicates_es6(arr) {
    let s = new Set(arr);
    let it = s.values();
    return Array.from(it);
}

示例用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];

b = remove_duplicates(a);
// b:
// ["Adam", "Carl", "Jenny", "Matt", "Mike", "Nancy"]

c = remove_duplicates_safe(a);
// c:
// ["Mike", "Matt", "Nancy", "Adam", "Jenny", "Carl"]

d = remove_duplicates_es6(a);
// d:
// ["Mike", "Matt", "Nancy", "Adam", "Jenny", "Carl"]
票数 160
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9229645

复制
相关文章
[LEETCODE]从排序数组中删除重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
用户2353021
2020/05/11
6.3K0
Swift 从排序数组中删除重复项 - LeetCode
给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
韦弦zhy
2018/09/11
5.2K0
js数组删除某一个元素_删除数组中重复元素
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
5.4K0
用于从数组中删除重复元素的 Python 程序
python 中的索引从 0 开始。在上面的块中,整数 6、4、1、5、9 是数组元素,0、1、2、3、4 是各自的索引值。
很酷的站长
2023/08/11
2970
[Leetcode][python]删除排序数组中的重复项/删除排序数组中的重复项 II
数组完成排序后,我们可以放置两个指针 ii 和 jj,其中 ii 是慢指针,而 jj 是快指针。只要 nums[i] = nums[j]nums[i]=nums[j],我们就增加 jj 以跳过重复项。
蛮三刀酱
2019/03/26
6.5K0
数组中某值是否重复问题
遍历一遍原数组,每遍历到一个数就把其exist对应位置(如遍历到10则exist的第10个位置)的书变为1。
摸鱼的G
2023/02/22
1.5K0
删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
木瓜煲鸡脚
2020/09/23
5K0
删除有序数组中的重复项
要求删除重复元素,实际上就是将不重复的元素移到数组的左侧,即慢指针p的右边都是不重复的元素,p—q之间是出现重复的元素。
大忽悠爱学习
2021/03/27
4.7K0
删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
_kyle
2020/11/03
4.5K0
<leetcode刷题-数组>删除排序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
哆哆jarvis
2022/08/23
4.4K0
删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
狼啸风云
2023/10/07
2090
leetcode: explore-array-21 从排序数组中删除重复项
1、输入:是一个列表,同时是一个 sorted array nums,即排好序的列表,并且列表中只包含数字 2、输出:一个整数,这个整数是将列表中元素进行去重后的实际个数 3、in-place,这个单词经常在数组类的题目中出现,即原地修改数组,Do not allocate extra space for another array,两者意思是等价的 3、注意看 Clarification 这段话,它说明了题目的另一个要求,和 in-place 是一致的,即题目虽然输出是一个数字,但会去检查函数传入的那个列表,要求它的前 n 项必须依次是不重复的数字。
用户7685359
2020/08/24
2K0
leetcode: explore-array-21 从排序数组中删除重复项
leetcode-python经典题之从排序数组中删除重复项
class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i] == nums[i+1]:
我去热饭
2022/05/18
1.6K0
[leetcode数组系列]3 删除排序数组中的重复项
1 leetcode原文链接 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 示例1
我是程序员小贱
2020/06/05
4.2K0
PHP判断数组是否有重复值、获取重复值
二、获取重复的值(一维数组的值完全相等是重复;如果是二维数组,二维数组中的值必须完全相同才是重复)
友儿
2022/09/11
3.8K0
删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。
狼啸风云
2023/10/07
2000
LeetCode | 删除有序数组中的重复项
题目 删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。 判题标准: 系统会用下面的代码来测试你的题解:
yiyun
2023/03/08
3.9K0
LeetCode | 删除有序数组中的重复项
删除排序数组中的重复数字Ⅱ
题意 根据 删除排序数组中的重复数字 中的题意,跟进 ”删除重复数字“,如果可以允许出现两次重复将如何处理? 样例 给出数组 A = [1,1,2,2,2,3],你的函数应该返回长度 5,此时 A = [1,1,2,2,3]。 思路 这道题跟 删除排序数组中的重复数字 差不多,无非就是多判断一次,判断是否有两个连续的重复元素即可。 代码实现 public class Solution { /** * @param A: a array of integers * @return
一份执着✘
2018/06/04
1.2K0
c语言删除数组中重复元素
原题:把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,7},输出为:1,2,7,3,4,5,8 在csdn上查了一下,发现给出的方法都很复杂,对新手很不友好,于是写了一个比较简单的,源码如下:
全栈程序员站长
2022/09/08
1.9K0
LeetCode - 删除排序数组中的重复项
LeetCode第26题,难度简单。这题题目也是相当的长,所以只取了题目的主干,示例和说明请点击下方链接查看详情。
晓痴
2019/08/22
4.1K0
LeetCode - 删除排序数组中的重复项

相似问题

从数组Node.js中删除重复的值

50

从JS数组中删除重复项

44

从数组中删除重复值

537

从数组中删除重复值

11

如何使用节点js从json数组中删除重复值?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文