I want a smaller way to write this condition I've tried to simplify it but it doesn't work with me
if(( data.includes(userId) || data.includes(userId.toString()) || data.includes(username) )) console.log(true)
this condition works very good but I want a simplified version of it
You can use the some
Array method to test for multiple predicates. Either
if ([userId, userId.toString(), username].some(x => data.includes(x))) …
or
if (data.some(x => [userId, userId.toString(), username].includes(x))) …
If you define data
as object instead of array, the condition can be simplified to:
if (data[userId] || data[username]) console.log(true)
Also, the check will be O(1)
instead of O(n)
. Example:
var data = {1:1, '2':1} if (data[1]) console.log(1) if (data[2]) console.log(2) if (data['2']) console.log("'2'") if (data[3] || data[2]) console.log('3 or 2')
or Set
:
var data = new Set([1, '2']) if (data.has(1)) console.log(1) if (data.has(2)) console.log(2) // false if (data.has('2')) console.log("'2'") if (data.has(3) || data.has(2) || data.has('2')) console.log('3 or 2')
Make flags using bitsets, such as this;
haveUserid = 1,
haveUsername = 2,
haveSchoolId = 4,
haveBadge = 8,
haveBlabla = 16,
Set the flag(let's say you want to set as haveUserid, haveUsername and haveBlabla)
data.flag = haveUserid + haveUsername + haveBlabla; // equals 1+2+8 = 11
and then you test the bits. I don't know if javascript has somekind of a function but you can also write a function of your own. That way you wouldn't have to write N amount of data.includes
inside an if statement and just test the bits to see if data.flag
satisfies your conditions.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.