변수를 확인하고 있습니다. foo
의 개수가 같은지 있습니다. 예를 들어
if( foo == 1 || foo == 3 || foo == 12 ) {
// ...
}
요점은 그러한 사소한 작업을위한 코드가 다소 많다는 것입니다. 나는 다음을 생각해 냈다.
if( foo in {1: 1, 3: 1, 12: 1} ) {
// ...
}
그러나 객체의 항목에 중복 값을 제공해야하기 때문에 이것은 나에게 완전히 호소력이 없습니다.
누구나 여러 값에 대해 평등 검사를 수행하는 적절한 방법을 알고 있습니까?
답변
배열을 사용할 수 있습니다 indexOf
:
if ([1,3,12].indexOf(foo) > -1)
답변
ECMA2016에서는 포함 방법을 사용할 수 있습니다 . 내가 본 가장 깨끗한 방법입니다. (IE를 제외한 모든 주요 브라우저에서 지원 (폴리 필은 링크에 있습니다)
if([1,3,12].includes(foo)) {
// ...
}
답변
제공된 답변을 사용하여 다음과 같이 끝났습니다.
Object.prototype.in = function() {
for(var i=0; i<arguments.length; i++)
if(arguments[i] == this) return true;
return false;
}
다음과 같이 호출 할 수 있습니다.
if(foo.in(1, 3, 12)) {
// ...
}
편집 : 최근 에이 ‘트릭’을 보았습니다. 값이 문자열이고 특수 문자가 포함되어 있지 않은 경우 유용합니다. 특수 문자의 경우 이스케이프로 인해 추악 해지고 그로 인해 오류가 발생하기 쉽습니다.
/foo|bar|something/.test(str);
더 정확하게 말하면 정확한 문자열을 확인하지만 간단한 동등성 테스트에서는 더 복잡합니다.
/^(foo|bar|something)$/.test(str);
답변
당신은 쓸 수 있습니다 if(foo in L(10,20,30))
당신이 정의하는 경우 L
로
var L = function()
{
var obj = {};
for(var i=0; i<arguments.length; i++)
obj[arguments[i]] = null;
return obj;
};
답변
이것은 쉽게 확장 가능하고 읽을 수 있습니다.
switch (foo) {
case 1:
case 3:
case 12:
// ...
break
case 4:
case 5:
case 6:
// something else
break
}
그러나 반드시 쉬운 것은 아닙니다 🙂
답변
var a = [1,2,3];
if ( a.indexOf( 1 ) !== -1 ) { }
indexOf는 핵심 ECMAScript에 없습니다. IE 및 가능하면 Array.prototype.indexOf를 지원하지 않는 다른 브라우저에 대한 스 니펫이 필요합니다.
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0)
{
n = Number(arguments[1]);
if (n !== n)
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n
: Math.max(len - Math.abs(n), 0);
for (; k < len; k++)
{
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
답변
또한 결과를 확인하는 값이 모두 고유하기 때문에 Set.prototype.has () 도 사용할 수 있습니다 .
var valid = [1, 3, 12];
var goodFoo = 3;
var badFoo = 55;
// Test
console.log( new Set(valid).has(goodFoo) );
console.log( new Set(valid).has(badFoo) );