一组数据:
[
{
name: '玉骨遥寒薇结海报',
created_at: '2021-06-04 04:54:06.164',
},
{
name: '玉骨遥寒薇结海报',
created_at: '2021-06-04 04:52:49.753',
},
{
name: '玉骨遥寒薇结海报',
created_at: '2021-06-04 05:02:02.398',
},
{
name: '公交车抛锚警民携手推车为考生开路',
created_at: '2021-06-04 04:52:40.588',
},
{
name: '公交车抛锚警民携手推车为考生开路',
created_at: '2021-06-04 05:07:21.587',
},
]
1.去除name相同的对象
2.且保留的是创建时间最早的对象
解决方法:
arr.sort (( n , m )=> n.created_at > m.created_at ?1:-1).reduce (( s , v )=>{
var itemIdx =s.findIndex(v1=>v1.name ==v.name)
if ( itemIdx ==-1){
s.push ( v )
}
return s },[])
数组去重有效的方法:
1.简单数组 利用ES6 Set去重(ES6中最常用)
function unique (arr) {
return Array.from(new Set(arr)) //from() 方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。
// 或者 [...new Set(arr)]
}
2.利用for嵌套for,然后splice去重(ES5中最常用)
function unique(arr){
for(let i=0; i<arr.length; i++){
for(let j=i+1; j<arr.length; j++){
if(arr[i].id===arr[j].id){ //第一个数id等于第二个数id,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}
return arr;
}
3.利用reduce+findIndex
function unique(arr) {
return arr.reduce((prev,cur)=>
prev.findIndex(v1=>v1.name==cur.name) ==-1 ? [...prev, cur] : prev
,[])
}
4.filter+findIndex
function unique(arr) {
return arr.filter((item,index)=>{
return arr.findIndex(it=>it.name == item.name) ===index
})
}
js如何去除一个数组中与另一个数组中的值相同的元素
法1:双层for循环
function array_diff(a, b) {
for (var i = 0; i < b.length; i++) {
for (var j = 0; j < a.length; j++) {
if (a[j].name == b[i].name) {
a.splice(j, 1)
j = j - 1
}
}
}
return a
}
法2:数组方法
function array_diff(a, b) {
return a.filter(ee=>b.findIndex(v1=>v1.name==ee.name) === -1)
}
网友评论