Javascript Array.some () и Array.every () эквивалентны для Set? - PullRequest
0 голосов
/ 12 мая 2019

В JavaScript есть эквивалент Array.some() и Array.every() для встроенного объекта Set?

Ответы [ 3 ]

3 голосов
/ 12 мая 2019

Он изначально не доступен на прототипе 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))
3 голосов
/ 12 мая 2019

Нет, единственные встроенные методы Set.prototype : :

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 голос
/ 12 мая 2019

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#Methods - документация для списка доступных методов для Set

Методы:

Set.prototype .add ()

Set.prototype .clear ()

Set.prototype .delete ()

Set.prototype .entries ()

Set.prototype .for Каждый ()

Set.prototype .has ()

Set.prototype .values ​​()

Set.prototype @@ итератора

В вашем контексте вы могли бы сделать что-то вроде ниже:

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

Для получения дополнительной информации о Array vs Set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...