집합에 값 배열을 추가하는 방법
배열의 모든 값을 추가하는 오래된 학교 방식.Set
다음과 같습니다.
// for the sake of this example imagine this set was created somewhere else
// and I cannot construct a new one out of an array
let mySet = new Set()
for(let item of array) {
mySet.add(item)
}
좀 더 우아한 방법이 없을까요?아마도요.mySet.add(array)
아니면mySet.add(...array)
?
PS: 둘 다 작동하지 않는 것으로 알고 있습니다.
하는 동안에Set
API는 여전히 매우 최소화되어 있으므로 코드를 사용하고 단축할 수 있습니다.
array.forEach(item => mySet.add(item))
// alternative, without anonymous arrow function
array.forEach(mySet.add, mySet)
새 세트를 반환하는 기능적인 방법은 다음과 같습니다.
const set = new Set(['a', 'b', 'c'])
const arr = ['d', 'e', 'f']
const extendedSet = new Set([ ...set, ...arr ])
// Set { 'a', 'b', 'c', 'd', 'e', 'f' }
이게 IMO에서 가장 우아합니다.
// for a new Set
const x = new Set([1,2,3,4]);
// for an existing Set
const y = new Set();
[1,2,3,4].forEach(y.add, y);
스프레드 연산자를 사용하여 새 배열 항목을 기존 집합에 쉽게 혼합하는 것은 어떻습니까?
let mySet = new Set([1,2,3,4])
const additionalSet = [5,6,7,8,9]
mySet = new Set([...mySet, ...additionalSet])
[JSFIDDLE][1][1]: https://jsfiddle.net/clayperez/yjkxh9d8/9/
사용할 수도 있습니다.Array.reduce()
:
const mySet = new Set();
mySet.add(42); // Just to illustrate that an existing Set is used
[1, 2, 3].reduce((s, e) => s.add(e), mySet);
새 집합 만들기:
//Existing Set
let mySet = new Set([1,2,3,4,5]);
//Existing Array
let array = [6,7,8,9,0];
mySet = new Set(array.concat([...mySet]));
console.log([...mySet]);
//or single line
console.log([...new Set([6,7,8,9,0].concat([...new Set([1,2,3,4,5])]))]);
영감을 얻기 위해 여기에 글을 올려보세요.Set을 확장하는 클래스를 만들고 addRange 메서드를 추가합니다.
class MegaSet extends Set {
constructor(iterable) {
super(iterable);
}
addRange(range) {
for (var elem of range) {
this.add(elem);
}
}
}
const array = [1,2,3,5,5,6];
let mySet = new MegaSet([1,2,3,4]);
mySet.addRange(array);
console.log([...mySet]);
let mySet = new Set(['a', 'b']);
let arrayToBeAdded = ['c', 'd'];
//convert the Set to an array, then concatenate both arrays, finally convert into a Set
mySet = Array.form(mySet).concat(arrayToBeAdded);
mySet = new Set(mySet);
//in single line
mySet = new Set(Array.form(mySet).concat(arrayToBeAdded));
집합을 만들 때 배열을 처음부터 입력합니다.배열에 있는 모든 항목이 포함된 세트를 받으실 수 있습니다.
const array = [1,2,3,4,5]
let mySet = new Set(array)
console.log(mySet)
//Add new one element
mySet.add(6)
console.log(mySet)
//Add exist element
mySet.add(6)
console.log(mySet)
현재는 없습니다.addAll
집합에 대한 방법이지만, 집합을 사용할 때 두 가지 옵션을 사용하여 작업을 단순화할 수 있습니다.첫 번째는 프로토타입을 확장하는 것입니다.그렇게 하기 전에 이 게시물을 읽고 가능한 결과가 프로젝트/의도된 용도에 적합한지 나중에 결정합니다.
if (!Set.prototype.addAll) {
Set.prototype.addAll = function(items) {
if (!Array.isArray(items)) throw new TypeError('passed item is not an array');
// or (not sure what the real Set.prototype will get sometime)
// if (!Array.isArray(items)) items = [items];
for (let it of items) {
this.add(it);
}
return this;
}
}
프로토타입을 확장하지 않기로 결정했다면 프로젝트에서 다시 사용할 수 있는 기능만 생성하면 됩니다.
function addAll(_set, items) {
// check set and items
for (let it of items) {
_set.add(it);
}
return _set;
}
@Fuzzyma, 세트에서 새로운 방법을 정의하기 위해 자바스크립트 프로토타이핑을 사용하는 것을 제안하겠습니다.
세트에 정의된 내장 메서드 이름을 사용하지 마십시오.
만약 당신이 내장된 기능명과 동일한 기능명을 사용하는 것을 여전히 선호한다면 다음과 같습니다.
add
그러면 세트를 상속하고 재정의하는 것이 더 나은 접근 방식이 될 것입니다.add()
방법.이것은 방법에 영향을 주지 않고 기존 객체에 방법을 추가하고 이름이 같은 우리만의 방법을 사용하는 더 나은 방법입니다.Method overriding의 카리스마, 멋진 OOP 컨셉.
여기 아래 코드에서, 나는 정의했습니다.addItems()
촬영장에서
var arr = [3, 7, 8, 75, 65, 32, 98, 32, 3];
var array = [100, 3, 200, 98, 65, 300];
// Create a Set
var mySet = new Set(arr);
console.log(mySet);
// Adding items of array to mySet
Set.prototype.addItems = function(array) {
for(var item of array){
this.add(item)
}
}
mySet.addItems(array);
console.log(mySet)
» 산출물
Set { 3, 7, 8, 75, 65, 32, 98 }
Set { 3, 7, 8, 75, 65, 32, 98, 100, 200, 300 }
언급URL : https://stackoverflow.com/questions/50881453/how-to-add-an-array-of-values-to-a-set
'programing' 카테고리의 다른 글
python mysql /mariaDB 데이터베이스 오류 (2013년, '쿼리 중 MySQL 서버와의 연결 끊김') (0) | 2023.09.09 |
---|---|
도커 컨테이너의 실행 명령을 표시하는 방법 (0) | 2023.09.09 |
일부 점을 클릭하여 정보를 긁어낼 수 없음 (0) | 2023.09.09 |
Oracle 10g을 사용한 후속 잠금에 대한 동면 경고 (0) | 2023.09.09 |
Angular Service Worker - 리소스 로드 실패: 서버가 504(게이트웨이 시간 초과) 상태로 응답했습니다. (0) | 2023.09.09 |