相当于Set的Javascript Array.some()和Array.every()吗?

时间:2019-05-11 22:57:16

标签: javascript arrays set

在JavaScript中,Array.some()内置对象是否具有Array.every()Set的等效项?

3 个答案:

答案 0 :(得分:3)

否,Set.prototype are上唯一的内置方法:

Set.prototype​.add()
Set.prototype​.clear()
Set.prototype​.delete()
Set.prototype​.entries()
Set.prototype​.for​Each()
Set.prototype​.has()
Set.prototype​.values()
Set.prototype​[@@iterator]()

将集合转换为数组,然后使用数组方法可能是最简单的。

const set1 = new Set([1, 2]);
const set2 = new Set([-1, 2]);

const allPositive = set => [...set].every(num => num > 0);
console.log(
  allPositive(set1),
  allPositive(set2)
);

答案 1 :(得分:3)

Set原型上本身不提供此功能,但是如果您发现自己经常需要此功能,则可以轻松地扩展Set以添加它。

class extendedSet extends Set{
  every(f){
    return Array.prototype.every.call([...this], f)
  }
  some(f){
    return Array.prototype.some.call([...this], f)
  }
}

let a_set = new extendedSet([1, 2, 3, 4]);

console.log(a_set.every(n => n < 2))
console.log(a_set.some(n => n < 2))

// still works as a Set
console.log(a_set.has(4))

答案 2 :(得分:1)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#MethodsSet

的可用方法列表
  

方法:

     

Set.prototype .add()

     

Set.prototype .clear()

     

Set.prototype .delete()

     

Set.prototype .entries()

     

Set.prototype.forEach()

     

Set.prototype .has()

     

Set.prototype..values()

     

Set.prototype @@ iterator

在您的情况下,您可以执行以下操作:

 Array.from(set).some() or Array.from(set).every()

有关Array vs Set

的更多信息