在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 Lodash为similar function,但支持JavaScript Array为builtin iterable。而且我更愿意避免进行多次Array↔Set/Set↔Array转换。
或者,我会编写自己的函数。
答案 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)