删除现有Set中的一组值

时间:2016-09-27 09:40:54

标签: javascript arrays

在JavaScript中,我有以下JSFiddle s:

removeAll(mySet, valuesToRemove);
// expected value of mySet: Set ["bar"]

// or a function that returns a new Set
var myNewSet = removeAll(mySet, valuesToRemove);
// expected value of myNewSet: Set ["bar"]

我需要一个删除一组值的函数:

league_ids

问题:是否存在可以解决问题的Set兼容库?

ES6-modules Lodashsimilar function,但支持JavaScript Arraybuiltin iterable。而且我更愿意避免进行多次Array↔Set/Set↔Array转换。

或者,我会编写自己的函数。

4 个答案:

答案 0 :(得分:1)

您可以使用for..of循环.delete()

var removeAll = (keys, arr) => {for (prop of keys) arr.delete(prop); return arr};
removeAll(valuesToRemove, mySet); // `Set [ "bar" ]`

答案 1 :(得分:1)

编写自己的函数要比使用库来实现单个轻量级功能要容易得多:



var mySet = new Set(["foo", "bar", "baz"]);
var valuesToRemove = new Set(["foo", "baz"]);

function removeAll(originalSet, toBeRemovedSet) {
  [...toBeRemovedSet].forEach(function(v) {
    originalSet.delete(v); 
  });
}

console.log([...mySet]);
removeAll(mySet, valuesToRemove);
console.log([...mySet]);




根据您的问题,我使用了ES6语法,因为您使用了ES6 为方便起见,您可以在SetUtility这样的静态类中使用此功能。

答案 2 :(得分:1)

您可以直接使用Set#forEach设置并删除其他设置中的值。

var mySet = new Set(["foo", "bar", "baz"]);
var valuesToRemove = new Set(["foo", "baz"]);

function removeAll(originalSet, toBeRemovedSet) {
    toBeRemovedSet.forEach((new Set).delete.bind(originalSet));
}

console.log([...mySet]);
removeAll(mySet, valuesToRemove);
console.log([...mySet]);

答案 3 :(得分:0)

我认为这可以解决这个问题,

Array.prototype.remByVal = function(val) {
    for (var i = 0; i < this.length; i++) {
        for (var j = 0; j < val.length; j++){
            if (this[i] === val[j]) {
                this.splice(i, 1);
                 i--;
            }
      }
    }
    return this;
}

var rooms = [1,2,3,4,5,6,7,8,9]
var re= [1,4,6,7,9]
rooms = rooms.remByVal(re)

console.log(rooms)
相关问题