조건부 배열 요소를 어떻게 정의 할 수 있습니까? 나는 다음과 같이하고 싶다.
const cond = true;
const myArr = ["foo", cond && "bar"];
이것은 예상대로 작동합니다. ["foo", "bar"]
내가 설정 한 경우 그러나 cond에 false, 나는 다음과 같은 결과를 얻을 :["foo", false]
조건부 요소로 배열을 어떻게 정의 할 수 있습니까?
답변:
조건이 인 경우 항목 배열을 깨끗하게 유지하기 위해 배열 내부에 배열을 분산 할 수 있습니다 false.
방법은 다음과 같습니다 .
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
console.log(items)
설명 :
보시다시피 삼항 연산자는 항상 배열을 반환합니다.
조건이 true이면 ['bar'], 그렇지 않으면 빈 배열을 반환합니다 [].
그 후 ...결과 배열 (삼항 연산에서) 을 펼치고 배열의 항목이 상위 배열로 푸시됩니다.
배열 항목이 없으면 (삼항 검사가 인 경우 false) 아무것도 푸시되지 않습니다. 이것이 우리의 목표입니다.
다른 답변에서 나는 동일한 아이디어를 설명했지만 객체에 대해 설명했습니다. 여기 에서도 확인할 수 있습니다 .
나는 이것을 할 것이다
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
이렇게하면 빈 문자열과 같은 잘못된 값 도 제거 됩니다.
다음을 사용하는 것 외에는 많은 옵션이 없습니다 push.
const cond = true;
const myArr = ["foo"];
if (cond) myArr.push("bar");
또 다른 아이디어는 잠재적으로 null을 추가하고 필터링하는 것입니다.
const cond = true;
const myArr = ["foo", cond ? "bar" : null];
myArr = myArr.filter((item) => item !== null);
몇 가지 다른 방법이 있지만 수행하는 방식은 실제로 Javascript에서 작동하지 않습니다.
가장 쉬운 해결책은 if 문을 사용하는 것입니다.
if (myCond) arr.push(element);
도 있습니다 filter.하지만 어떤 조건에 대해 모든 것을 확인하는 것보다 "이 한 가지 조건이 참이면이 한 가지 추가"를 선택하는 것처럼 보이기 때문에 여기에서 원하는 것이 전혀 없다고 생각합니다. 비록 당신이 정말로 이상해지기를 원한다면 이것을 할 수 있습니다 (권장하지는 않지만 할 수 있다는 것은 멋지다).
var arr = ["a", cond && "bar"];
arr.filter( e => e)
기본적으로 모든 비 참 값을 필터링합니다.
var arr = ["a", cond && "bar"].filter(e => e);@Adam LeBlanc 을 할 수도 있지만 당신 말이 맞습니다. 아마도 쓰레기 일 것입니다. 하지만 쓰레기를 냉각)
대체 방법 : 사후 필터링 대신 사전 필터 채우기 :
const populate = function(...values) {
return values.filter(function(el) {
return el !== false
});
};
console.log(populate("foo", true && "bar", false && "baz"))
보고
(2) ["foo", "bar"]
나는 그것이 속기 표기법을 해결하지 못한다는 것을 알고 있지만 (당신이 무엇을 시도해도 작동하지 않기 때문에) 그것에 가깝습니다.