Set 语法
具体参考 https://www.csdn.net/tags/MtzaUg3sMjk3NS1ibG9n.html#4_clear_50
ES6的Set的基本用法
1.增 add(数据)
添加一个数据到集合的末尾 如果这个数字原本就存在,那就不进行任何操作
var $add = new Set();
$add.add(1);
$add.add(2);
$add.add(5);
$add.add(5); //这条数据无效添加,因为已经有了这个数据
console.log($add);
//set使用object.is来判断两个值是否相等,但是专门针对-0 和 +0做了处理,在set里面默认他们相等
$add.add(-0);
$add.add(+0);
console.log($add); //-0和+0也只加入了一个
$add.add(NaN);
$add.add(NaN);
console.log($add);//NaN也只加入了一个
2.查:has(数据)
判断set集合中是否存在查询的这个数据 返回值为boolean类型
var $has = new Set();
console.log($has.has(1)); //true
console.log($has.has(NaN)); //true
console.log($has.has(+0)); //true
console.log($has.has(-0)); //true
console.log($has.has(6)); //true
console.log($has.has(9)); //false
3.删:delete(数据)
对集合里面的数据进行匹配,匹配成功就删除
var $delete = new Set();
console.log($delete.delete(9));
//flase 表示没有找到9这个数据 所以删除失败 返回false
console.log($delete.delete(1));
//true 表示找到了1这个对应的数据 所以删除成功 返回true
console.log($delete); //{2, 6, 5, 0, NaN}
4.清空 clear()
清空整个set集合,不需要传任何参数,clear方法是没有返回值的
var $clear = new Set();
console.log($clear.clear()); //undefined
console.log($clear); //set(0){}
5.size属性
是获取set合集里面所有的元素个数,基本上是数组的长度类似
但是 size只是可读性,不能重新赋值,如果重新赋值,不会起任何作用,也不会报错
var $size = new Set();
console.log($size.size); 0
$size.size = 7;
console.log($size); //set(0){}
数组的长度 可以进行设置,设置过后同样改变数组元素,没有元素的值为空
var arr = [12, 23, 332];
console.log(arr.length); //3
arr.length = 5;
console.log(arr); //[12,23,332,empty乘以2]
6.set集合的遍历
使用for-of进行遍历 返回的item是每一项的值
for (const item of s) {
console.log(item);
}
7.forEach方法
forEach方法是set集合的实例化方法,但是set集合没有下标,所以item和index都表示元素
s.forEach((item, index, s) => {
console.log(item);
console.log(index);
console.log(s);
})
8.filter方法
返回值是一个新数组,用来检测数组中的元素是否符合某一条件,把符合条件的元素过滤出来
例如,在一个Array中,删掉偶数,只保留奇数,可以这么写
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var res = arr.filter(function (item,index,self) {
return item % 2 !== 0;
});
console.log(res);
console.log(arr);
例如,把一个Array中的空字符串删掉,可以这么写:
元素前后的空格需要遍历删除,这个只能删除空字符串
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim();
// 注意:IE9以下的版本没有trim()方法
});
console.log(arr); // ['A', 'B', 'C']
回调函数
filter()接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示Array的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身:
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (item, index, self) {
console.log(item); // 依次打印'A', 'B', 'C'//元素
console.log(index);// 依次打印0, 1, 2 //索引
console.log(self); // self就是变量arr
return true;
});
数组去重
var arr1 = ["aaa","bbb","ccc","bbb","aaa"];
var arr2 =
arr1.filter(function(item,index,arr){
return arr.indexOf(item) == index;
})
console.log(arr2); //["aaa","bbb","ccc"]
交集,并集,差集
var arr1 = [19, 69, 67, 58, 26, 67];
var arr2 = [18, 79, 58, 99, 67, 79, 67];
//并集
// var arrs = arr1.concat(arr2);
// var sss = new Set(arrs);
// arrs = [...sss];
// console.log(arrs);
var con = [...new Set([...arr1, ...arr2])];
console.log(con);
//交集
// var a1 = new Set(arr1);
// var a2 = new Set(arr2);
// var a = [...a1, ...a2];
// console.log(a);
// var ssw = a.filter(function (item, index, arr) {
// return arr.indexOf(item) != index;
// })
// console.log(ssw);
var inter = [...new Set(arr1)].filter(function (item) {
return arr2.indexOf(item) >= 0;
})
console.log(inter);
var inter2 = [...new Set(arr1)].filter(item => arr2.indexOf(item) >= 0);
console.log(inter2);
//差集
var arr3 = con.filter(function (item, index, arr) {
return inter.indexOf(item) < 0;
})
console.log(arr3);
素数
'use strict';
function get_primes(arr) {
var s = arr.filter(function(x){
if(x<4)return x!=1;
var i=2;
for(;i<=x/2;++i)
if(x%i==0)return false;
return true;
});
return s;
}
// 测试:
var
x,
r,
arr = [];
for (x = 1; x < 100; x++) {
arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
alert('测试通过!');
} else {
alert('测试失败: ' + r.toString());
}