js用Set 实现并集(Union)、交集(Intersect)和差集(Difference)

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));//ES6
var intersect = new Set([...a].filter(function(x){
    return b.has(x);
}))
// set {2, 3}

// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

 

 

ztree 模糊搜索 子节点没有符合的时候同时隐藏父节点

var hiddenNodes=[]; 
var hiddenNodesFinal=[];
function queryData(){
var zTreeObj = $.fn.zTree.getZTreeObj("treeDemo");
var _keywords=$("#userName").val();

var shownNodes=[];
var parentNodesSet=new Set();
//显示上次搜索后被隐藏的结点
    zTreeObj.showNodes(hiddenNodesFinal);
    //查找不符合条件的叶子节点
    function filter(node){
        if(node.name.indexOf(_keywords)!=-1){
        shownNodes.push(node);
        return false;
        }
        return true;        
    };
    //获取不符合条件的叶子结点
    hiddenNodes=zTreeObj.getNodesByFilter(filter);
    //放到父节点集合中
    for(var i=0;i<shownNodes.length;i++){
    addParentNodes(shownNodes[i]);
    }
    //递归找出所有父节点放到集合中
    function addParentNodes(node){
    if(node!=null){
    var parentNode=node.getParentNode();
        if(parentNode!=null){
        console.log("parentNode:"+parentNode);
        parentNodesSet.add(parentNode);
            addParentNodes(parentNode);
        }
    }else{
    return;
    }
    }
    //隐藏节点与父节点求差集找出最终应该隐藏的节点
var a=new Set(hiddenNodes);
var b=parentNodesSet;
var differenceABSet = new Set([...a].filter(x => !b.has(x)));
//集合转数组
hiddenNodesFinal = Array.from(differenceABSet);
    //隐藏不符合条件的叶子结点
    zTreeObj.hideNodes(hiddenNodesFinal);
}
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是由C语言构成的代码,实现了集合的抽象数据类型 Set: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int size; } Set; void createSet(Set *s, int a[], int n) { s->size = ; for (int i = ; i < n; i++) { int j; for (j = ; j < s->size; j++) { if (s->data[j] == a[i]) { break; } } if (j == s->size) { s->data[s->size++] = a[i]; } } } void printSet(Set *s) { printf("{ "); for (int i = ; i < s->size; i++) { printf("%d ", s->data[i]); } printf("}\n"); } int isElementOf(Set *s, int x) { for (int i = ; i < s->size; i++) { if (s->data[i] == x) { return 1; } } return ; } void unionSet(Set *s, Set *t, Set *u) { u->size = ; for (int i = ; i < s->size; i++) { u->data[u->size++] = s->data[i]; } for (int i = ; i < t->size; i++) { if (!isElementOf(s, t->data[i])) { u->data[u->size++] = t->data[i]; } } } void differenceSet(Set *s, Set *t, Set *u) { u->size = ; for (int i = ; i < s->size; i++) { if (!isElementOf(t, s->data[i])) { u->data[u->size++] = s->data[i]; } } } void intersectSet(Set *s, Set *t, Set *u) { u->size = ; for (int i = ; i < s->size; i++) { if (isElementOf(t, s->data[i])) { u->data[u->size++] = s->data[i]; } } } int main() { int a[] = {1, 2, 3, 4, 5}; int b[] = {3, 4, 5, 6, 7}; Set s, t, u; createSet(&s, a, 5); createSet(&t, b, 5); printf("Set s: "); printSet(&s); printf("Set t: "); printSet(&t); printf("Is 3 in set s? %d\n", isElementOf(&s, 3)); printf("Is 6 in set s? %d\n", isElementOf(&s, 6)); unionSet(&s, &t, &u); printf("Set s union t: "); printSet(&u); differenceSet(&s, &t, &u); printf("Set s difference t: "); printSet(&u); intersectSet(&s, &t, &u); printf("Set s intersect t: "); printSet(&u); return ; } ``` 在这个代码,我们使用了一个结构体 Set 来表示集合,其包含一个整数数组 data 和一个整数 size,分别表示集合的元素和集合的大小。我们实现了以下基本运算: - createSet:由整数数组 a[..n-1] 创建一个集合。 - printSet:输出一个集合的所有元素。 - isElementOf:判断一个元素是否在一个集合。 - unionSet:求两个集合的并集。 - differenceSet:求两个集合的差集。 - intersectSet:求两个集合的交集。 我们还在 main 函数演示了如何使用这些基本运算来操作集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值