-
2021-01-14 15:13:58
1.双层循环,外层循环元素,内层循环时比较值;如果有相同的值则跳过,不相同则push进数组// formatConcatArr(array)==[ 1, 23, 2, 3 ]
formatConcatArr(array)=={ {formatConcatArr([1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 1, 23, 1, 23, 2, 3, 2, 3, 2, 3])}}formatConcatArr (array) {
let arr = array
let result = []
let i
let j
let len = arr.length
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
j = ++i
}
}
result.push(arr[i])
}
return result
}
2.利用splice直接在原数组进行操作
双层循环,外层循环元素,内层循环时比较值;值相同时,则删去这个值
注意点:删除元素之后,需要将数组的长度也减1.(优点:简单易懂;缺点:占用内存高,速度慢)
// formatConcatAr
更多相关内容 -
ES5 ES6中Array对象去除重复项的方法总结
2020-08-30 16:51:36主要给大家介绍了Array对象去除重复项的相关资料,文中通过示例代码详细介绍了在ES5和ES6中Array对象去除重复项的方法,需要的朋友可以参考借鉴,下面来一起看看吧。 -
es6去除重复项_使用Sum结合Countif统计去除重复值统计数量!
2020-12-12 18:35:36比如下面的表格就一个月累计数据,那么,如果想知道整个表格中去除重复的人名后,一共有多少个销售人员,我们可以通过Sum结合Countif的数组方法求得该结果。函数公式在E2单元格输入公式【{=SUM(1/COUNTIF($B$2:$B$13...工作中有时经常遇到各日、各月、各季、或各年的数据累计到一张表格的中的情况。比如下面的表格就一个月累计数据,那么,如果想知道整个表格中去除重复的人名后,一共有多少个销售人员,我们可以通过Sum结合Countif的数组方法求得该结果。
函数公式
在E2单元格输入公式【{=SUM(1/COUNTIF($B$2:$B$13,$B$2:$B$13))}】,回车后得到计算结果。
函数解读
1.公式中的“COUNTIF($B$2:$B$13,$B$2:$B$13)”是一个数组的使用方法,COUNTIF函数的作用是一个区域中,根据条件统计单元格的个数,语法为:=COUNTIF(range,criteria)。那么1/COUNTIF($B$2:$B$13,$B$2:$B$13),就得了所有单元格数量分之一的结果。最后通过SUM函数将这些分之一的结果进行求和汇总,自然就得到了唯一值的数量统计结果。
2.需要注意的是,公式两端的花括号不是手工输入的,是在公式输入完成后,使用Ctrl+Shift+Enter三键组合进行输入,完成数组公式的计算。
当然,平时在使用函数公式时,数组有时并不是太好理解。那么就本题型而言,也可使用Excel的“删除重复项”工具来获取唯一值的结果。
更多教程:OKOFFICE(办公随手学)
微信公众号:Office_zh
-
ES6中如何删除数组中的重复项
2021-01-14 15:13:59ES6中,如何删除一个数组中的重复数据呢,以下是我总结的,从数组中过滤掉重复项并且返回唯一值的三种方法。我最喜欢的是使用Set因为它是最简单和最简单的????const array = ['????',1, 2,'????','????', 3]// 1: '...ES6中,如何删除一个数组中的重复数据呢,以下是我总结的,从数组中过滤掉重复项并且返回唯一值的三种方法。我最喜欢的是使用Set因为它是最简单和最简单的😁
const array = ['🐷',1, 2,'🐷','🐷', 3]
// 1: 'Set'
[... new Set(array)]
// 2: 'Filter'
array.filter((item, index) => array.indexOf(item) === index)
// 3: 'Reduce'
array.reduce((unique, item) => unique.includes(item) ? unique : [...unique, item], [])
// 返回结果
[ '🐷', 1, 2, 3 ]
1. 使用Set
我先解释一下什么是Set:
Set是ES6中引入的新数据对象。Set只允许您存储唯一值。当传入数组时,它会删除任何重复的值。
ok,我们重新回到刚才的代码来分析一下发生了什么事情,(上面的代码)做了两件事情。
1、首先,我们通过传递一个数组来创建了一个新的Set,因为Set只允许存储唯一的值,所以数组中那些重复的值会被删除。
2、创建一个新的Set对象后,重复值已经被删除了,现在我们使用...运算符,将其转换回数组。
const array = ['🐷',1, 2,'🐷','🐷', 3]
// Step 1
const uniqueSet = new Set(array)
# Set { '🐷', 1, 2, 3 }
// Step 2
const backToArray = [...uniqueSet]
# [ '🐷', 1, 2, 3 ]
使用Array.from 将Set转换为Array
或者你也可以使用Array.from将Set转化为数组
const array = ['🐷',1, 2,'🐷','🐷', 3]
Array.from(new Set(array))
# [ '🐷', 1, 2, 3 ]
2.使用Filter
为了便于理解,我们先来看下indexOf和filter会做什么事情
indexOf
indexOf方法会将我们提供的参数,在数组中找到该元素的第一个索引值并返回。
const array = ['🐷',1, 2,'🐷','🐷', 3]
array.indexOf('🐷') #=> 0
array.indexOf(1) #=> 1
array.indexOf(2) #=> 2
array.indexOf(3) #=> 5
filter
filter()方法会根据我们传递的条件,来创建一个新的元素数组。换句话说,如果元素通过并返回true,它将包含在已经过滤的数组中。任何失败元素或者返回为false的,都不会在过滤后的数组中。
让我们一步步来分析数组循环时发生的事情
const array = ['🐷',1, 2,'🐷','🐷', 3]
array.filter((item, index) => {
console.log(
// a. Item
item,
// b. Index
index,
// c. IndexOf
array.indexOf(item),
// d. Condition
array.indexOf(item) === index,
);
return array.indexOf(item) === index
})
以下是上面显示的console.log的输出。重复项是索引与indexOf不匹配的位置。因此,在这些情况下,条件将为false,不会包含在我们的过滤数组中。
image.png
检索重复值
我们还可以使用filter方法从数组中检索重复值。我们可以通过简单地修改我们的条件就可以做到:
const array = ['🐷',1, 2,'🐷','🐷', 3]
array.filter((item, index) => array.indexOf(item) !== index)
# [ '🐷', '🐷' ]
再次,如果我们一步一来执行上面的代码,可以查看输出:
image.png
3.使用 reduce
reduce方法用于减少数组的元素,并根据您传递的某些reducer函数将它们组合成最终数组。
在这个例子中,我们的reducer函数检查我们的最终数组是否包含该项。如果没有,请将该项目推送到我们的最终数组中。否则,跳过该元素并按原样返回我们的最终数组(基本上跳过该元素)。
reduce总是有点难以理解,所以让我们进入每个案例并查看输出:
array.reduce((unique, item) => {
console.log(
// a. Item
item,
// b. Final Array (Accumulator)
unique,
// c. Condition (Remember it only get pushed if this return 'false')
unique.includes(item),
// d. Reducer Function Result
unique.includes(item) ? unique : [...unique, item],
);
unique.includes(item) ? unique : [...unique, item]
}, [])
# [ '🐷', '🐷' ]
这是console.log的输出:
image.png
参考资料
说明
-
JS简单去除数组中重复项的方法
2020-10-21 13:17:13主要介绍了JS简单去除数组中重复项的方法,涉及javascript针对数组的遍历、判断与运算相关操作技巧,需要的朋友可以参考下 -
ES6-从对象数组中删除重复项
2021-07-16 16:29:33Assuming an array of objects as follows:const listOfTags = [{id: 1, label: "Hello", color: "red", sorting: 0},{id: 2, label: "World", color: "green", sorting: 1},{id: 3, label: "Hello", color: "blue",...Assuming an array of objects as follows:
const listOfTags = [
{id: 1, label: "Hello", color: "red", sorting: 0},
{id: 2, label: "World", color: "green", sorting: 1},
{id: 3, label: "Hello", color: "blue", sorting: 4},
{id: 4, label: "Sunshine", color: "yellow", sorting: 5},
{id: 5, label: "Hello", color: "red", sorting: 6},
]
A duplicate entry would be if label and color are the same. In this case Objects with id = 1 and id = 5 are duplicates.
How can I filter this array and remove duplicates?
I know solutions where you can filter against one key with something like:
const unique = [... new Set(listOfTags.map(tag => tag.label)]
But what about multiple keys?
As per request in comment, here the desired result:
[
{id: 1, label: "Hello", color: "red", sorting: 0},
{id: 2, label: "World", color: "green", sorting: 1},
{id: 3, label: "Hello", color: "blue", sorting: 4},
{id: 4, label: "Sunshine", color: "yellow", sorting: 5},
]
解决方案
You could use a Set in a closure for filtering.
const
listOfTags = [{ id: 1, label: "Hello", color: "red", sorting: 0 }, { id: 2, label: "World", color: "green", sorting: 1 }, { id: 3, label: "Hello", color: "blue", sorting: 4 }, { id: 4, label: "Sunshine", color: "yellow", sorting: 5 }, { id: 5, label: "Hello", color: "red", sorting: 6 }],
keys = ['label', 'color'],
filtered = listOfTags.filter(
(s => o =>
(k => !s.has(k) && s.add(k))
(keys.map(k => o[k]).join('|'))
)
(new Set)
);
console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
-
如何在 ES6 中删除数组重复项
2021-09-08 15:11:23以下是从数组中过滤掉重复项并仅返回唯一值的三种方法。我最喜欢使用 Set 因为它是最短和最简单的 ???? -
javascript在ES6中从数组中筛选出重复项并仅返回唯一值
2021-01-26 23:00:58这是从数组中筛选出重复项并仅返回唯一值的三种方法。我最喜欢的是使用Set,因为它是最短和最简单的。1.使用Set首先让我解释一下Set:Set是ES6中引入的新数据对象。因为Set仅允许您存储唯一值。传递数组时,它将删除... -
ES6中删除重复的数组元素的几种方法( Set 方法最简单 )
2021-07-24 09:44:24Set是ES6中引入的一个新的数据对象。因为Set只允许你存储唯一的值。当你传入一个数组时,它将删除其中所有重复的值。 让我们回到我们的代码,分解一下代码发生了什么。这里做了2件事: 首先,我们创建了一个新的Set... -
算法+ES6-比较4个对象数组并删除所有重复项
2021-01-14 15:13:57将所有项目组合到一个数组中,然后使用Array.reduceRight()复杂性是O(N1+N2+N3),其中Nx是该数组的长度。const arr_p1 = [{ id: "892d" }, {id: "kla8x" }, {id: "sys32" }]const arr_p2 = [{id: "saa1" }, { id: "892... -
ES6数组对象去重复
2021-04-30 18:44:51数组对象去重复的原理很简单,就是利用对象,对象的key值只有一个。代码如下 const template = [ { group_id: 1, name: 1 }, { group_id: 2, name: 2 -
es6合并数组,去掉重复的数据
2019-10-10 17:25:23function combine() { let arr = [].concat.apply([], arguments... //没有去重复的新数组 return Array.from(new Set(arr)); } var m = [1, 2, 2], n = [2, 3, 3]; console.log(combine(m, n)); // [1,2,3] ... -
ES6 数组合并,向下查重且去除重复项;
2020-09-10 15:28:11应用场景:在项目中选择数组对象内容,选择后需要有所标识,或者默认会有一组数组对象数据追加到请求的数组中,且在最前端展示,其后加载过来的相同的数据对象将被替换掉;需要数组对象查重处理;... -
封装去除数据重复元素的几种方法(es6新方法和es6之前的老方法)
2019-03-19 14:49:54去除重复元素要分两类,一类是JSON数组,一类是普通数组 JSON数组要注意一点,如果对象的指针指向不一样,那么就算属性完全相同,也不能算作重复元素,所以我这里根据对象的唯一标识判断是否重复 上代码 Array.... -
js删除数据重复的数据(es6简单方法)
2019-09-11 14:23:21场景 let a = [{id: 1}, {id: 2}, {id: 3}]; let b = [{id: 1}, {id: 2}, {id: 3}, {id: 4}, {id: 5}] // 期望结果 [{id: 4}, {id: 5}] 解决方案 let a = [{id: 1}, {id: 2}, {id: 3}];...let b = [{id: 1}, {id: 2},... -
es6 去掉两个数组中相同的元素(对象)
2021-03-12 12:52:14去掉后返回新数组newArr const newArr = jmXmList.filter(selectedItem => selectedRows.some(row => row.selectedId !== selectedItem.selectedId)); 第2种 去掉后返回新数组newArr const selectIdList =... -
es6去掉两个数组中的id为一致的对象
2020-12-01 10:09:47es6的方法,分别去除两个数组中id值为一致的对象。生成两个新数组。 实现步骤: let arr1=[{id:1,name:"张三"},{id:2,name:"李四"}] let arr2=[{id:1,name:"张三"},{id:3,name:"王五"},{id:44,name:"王柳"},{... -
es6去除两个数组中相同的对象
2020-07-09 14:53:22letarr1=[{id:1},{id:2},{id:3},{ id:4},{ id:5}] letarr2=[{ id:1},{ id:2},{id:3}] arr1=arr1.filter(item=>{ letidList=arr2.map(v=>v.id) return!idList.includes(item.id) }) ... -
js去除重复项
2020-08-10 16:39:34//既然都用了set数组,es6的语法,那就得用配套的 console.log([...a]) //下面这种也行 //console.log(Array.from(a)) 简化上面的写法 var arr=[1, 2, 4, 4, 3, 3, 1, 5, 3]; var a=[...new Set(arr)]; -
es6删除数组某一项_ES6系列(三)set和map
2020-11-20 19:53:41es6新增了几种数据结构:set和map。注意哦,是数据结构,不是数据类型!就好比数组,json等。一.Set它类似于数组,但是其成员的值都是唯一的,没有重复的值(甚至在Set内部,NaN和NaN是相等的)它在初始化的时候接受... -
ES6数组去重,去空
2018-08-07 14:55:23//这里使用的是Set的一个特性,集合中不会包含重复项。 console.log(arr5) var arr6=Array.from(arr5)//Array.from()是将一个类数组对象或者可遍历对象转换成一个真正的数组 console.log(arr6) //方法三:用... -
去掉一个数组中的重复项,并按升序排序
2021-03-24 09:08:44去掉一个数组中的重复项,并按升序排序 方法1:indexOf() function removeRepeat(arr){ let result = [] for(var i=0;i<arr.length;i++){ if(result.indexOf(arr[i]) == -1){ result.push(arr[i]) } } ... -
Js中数组去除重复项
2020-04-18 10:36:46在学习Js的时候经常会用到数组去除重复项的问题 下列将用不同的方法实现去重的问题: 一、利用双重循环和数组splice方法 function unique(arr) { var len = arr.length //第一重控制外部循环次数 for (var i ... -
为Array对象添加一个去除重复项的方法
2022-03-25 17:06:34输入例子: ...ES6新增了 Set 对象,也就是我们所说的“集合”,它类似于数组,但是成员 的值都是唯一的,没有重复的值。所以可以方便去重。 Set本身是一个构造函数,用来生成Set数据结构。(详