1.ES6新增:Set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。
var arr1 = [10,50,60,20,50,10,'haha','hi','haha'];
// Array.from()方法可以将Set结构转换为数组Array.from(new Set(array))
var arr2 = Array.from(new Set(arr1));
console.log(arr2); // [10, 50, 60, 20, "haha", "hi"]
2.filter + indexOf
filter语法:
var newArray = arr.filter(callback)
创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。返回值:一个新的、由通过测试的元素组成的数组;如果没有任何数组元素通过测试,则返回空数组。
例:
var arr = [10,20,30,40,50];
function fn1(data) {
return data < 40;
}
var arr2 = arr.filter(fn1);
console.log(arr2); // [10,20,30]
indexOf语法:返回在数组中可以找到的元素的第一个索引,如果不存在,则返回-1。
indexOf() 方法对大小写敏感!
如果要检索的字符串值没有出现,则该方法返回 -1。
例:
var arr = [10,20,30,40,20];
console.log(arr.indexOf(20)); // 1
console.log(arr.indexOf(20,2)); // 4
console.log(arr.indexOf(20,5)); // -1
console.log(arr.indexOf(20,-1)); // 4
console.log(arr.indexOf(20,-13213)); // 1
去重:
var arr = [10,50,60,20,50,10,'haha','hi','haha'];
let arr2 = arr.filter((item,index) => {
console.log(item,index)
return arr.indexOf(item) === index;
})
console.log(arr2); // [10, 50, 60, 20, "haha", "hi"]
3.sort + for循环
sort语法:用原地算法对数组的元素进行排序,并返回数组。排序算法现在是稳定的。默认排序顺序是根据字符串Unicode码点。
返回值:排序后的数组。请注意,数组已原地排序,并且不进行复制。
例:
var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
arr = arr.sort();
console.log(arr) // [10, 10, 100002, 100002, 20, 20, 20, 30, 40, 40, 50, 50, 70, 70, 80, 80]
将排序后的数组的第一个值添加进一个数组,然后将排序后的数组遍历下,每一个与前一个对比,值不一样的push进去,得到一个去重的新数组:
var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
arr = arr.sort();
var result = [arr[0]]
for (let i=1; i< arr.length; i++) {
arr[i] !== arr[i-1] && result.push(arr[i])
}
console.log(result) // [10, 100002, 20, 30, 40, 50, 70, 80]
4.indexOf + for循环
创建一个新的空数组,for循环遍历需要去重的数组,新数组调用indexOf方法逐一匹配旧数组里的值,返回-1时,push进新的数组:
var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
var newarr = [];
for (var i=0; i< arr.length; i++) {
if (newarr.indexOf(arr[i]) === -1) {
newarr.push(arr[i])
}
}
console.log(newarr) // [10, 70, 20, 80, 50, 40, 100002, 30]
5.和对象结合
var arr = [1,1,2,2,5,4,3,4,3,5,6,6,8,8,9,9];
var result = [];
let obj = {};
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1;
}
}
console.log(result)
网友评论