2

How can i shorten this code? I want to return all values except "abc" or "xyz" or "pqr"

return this.value != "abc" && this.value != "xyz"  && this.value != "pqr";

2 Answers 2

1

You can use an array:

return ["abc","xyz","pqr"].indexOf(this.value) == -1;

Or an object:

return !({"abc":1,"xyz":1,"pqr":1}).hasOwnProperty(this.value);
Sign up to request clarification or add additional context in comments.

3 Comments

surprisingly the first statement gives an error in IE7 but works well in all other browsers
It seems that Internet Explorer has that method not yet implemented in version 7.
The object scheme does not work. Consider this.value === 'toString'. You can fix it by using hasOwnProperty instead
1

2 most common ways are:

  1. regex

    /^(abc|xyz|pqr)$/.test(this.value)

  2. object property lookup

    this.value in ({'abc':1,'xyz':1,'pqr':1})

Note that regex-based solution (#1) will most definitely be slower than plain comparison (your version) or property lookup (#2).

Also, remember that property lookup is not very reliable, as it might report false positives for any key that's named the same as any of Object.prototype.* properties (e.g. "toString", "valueOf", etc.)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.