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());
}
posted @ 2022-05-07 16:45  会前端的洋  阅读(75)  评论(0编辑  收藏  举报