js数组去重,排序

一、普通数组去重

方法1
使用es6的Set()方法,代码量少,只要拿到数组一句话搞定,最快了

var arr = [1,2,3,3,1,4];
var arr2=Array.from(new Set(arr));
document.write(arr2);

方法2
基础操作

var arr = [1,2,3,3,1,4];
for(var i=0; i<arr.length; i++){
	for(var j=i+1; j<arr.length; j++){
		if( arr[i]===arr[j]){
			arr.splice(j,1);
			j--;
		}
	}
}
document.write(arr);

方法3
基础操作,使用数组的indexof判断某个值是否存在

let arr = [1,2,3,3,1,4];
let arr1=[]
for (let i = 0; i < arr.length; i++){
	if (arr1.indexOf(arr[i])=== -1) { //检索的值没有出现,返回-1
		arr1.push(arr[i]);
	}
}
console.log(arr1);

方法4
(放这儿参考,有好心人可以给我说下方法四是什么意思,我现在理解不了)

let arr=[1,2,1,2,3,5,4,5,3,4,4,4,4];
let result = arr. sort() .reduce((init, current) => {
	if (init.length === 0 || init[init.length - 1] !== current) {
		init. push(current);
	}
	return init;
},[]);
console.log(result); //[1,2,3,4,5]

方法5

let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6, 6, 6, 6];
let newArr = arr.filter((item, index, self) => self.indexOf(item) === index)
console.log(newArr)

二、对象数组去重

this.tagsList.push({
	name: to.meta.title,
	title: to.meta.title,
	path: to.fullPath,
})

方法1

//利用对象访问属性的方法,判断对象中是否存在key
var result = [];
var obj = {};
this.tagsList.forEach(v => {
	if(!obj[v.path]) {
		result.push(v)
		obj[v.path] = true
	}
})
console.log(result);
this.tagsList=result;

方法2

//利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
let obj = {};
this.tagsList = this.tagsList.reduce((array, item) => {
	obj[item.path] ? '' : obj[item.path] = true && array.push(item);
	return array;
}, []);

三、数组对象排序

//针对数组的children中某属性排序
recursiveData(data) {
	data.forEach(item => {
		if (item.children.length > 0) {
			item.children.sort((a, b) => {
				return a.priority - b.priority
		})
			this.recursiveData(item.children)
		}
	})
},
const arrObj = [
   {
      age: 11,
      name: '小红'
   },
   {
      age: 10,
      name: '小绿'
   },
   {
      age: 20,
      name: '小紫'
   },
   {
      age: 8,
      name: '小粉'
   },
] 

// 从大到小排序
arrObj.sort((a, b) => {
   return b.age - a.age // 从小到大 -> a.age - b.age
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值