Achtung, Falle

Bild



Ich habe gerade einen sehr subtilen Fehler in meinem Code für die Validierungsbibliothek des Quartetts gefunden und möchte ihn teilen.



Aufgabe



Gegeben eine Liste von Zeichenfolgen: VALID_STRINGS.

Erstellen Sie eine Validierungsfunktion test(x), die zurückgegeben werden soll, truewenn xes sich um eine der Zeichenfolgen in diesem Array handelt.

Geltungsbereich: x- Beliebiger Javascript-Wert

Einschränkungen: Verwenden Sie ES6 nicht. (Ziel - alter Browser)



Lösung 1: Eine direkte Entscheidung



Die einfachste Lösung besteht darin, alle Zeilen in diesem Array durchzugehen und zu vergleichen.



const VALID_STRINGS = [/* VALID STRINGS */]
function test1(x) {
  for (let i = 0; i < VALID_STRINGS.length; i++) {
    if (VALID_STRINGS[i] === x) return  true
  }
  return false
}


, , . O( VALID_STRINGS)



, (indexOf, includes, some, reduce ...). , .



№2:



, .



. . .



const VALID_STRINGS = [/* VALID STRINGS */]
const VALID_STRINGS_DICT = {}
for (let i = 0; i < VALID_STRINGS.length; i++) {
  const validString = VALID_STRINGS[i]
  VALID_STRINGS_DICT[validString ] = true
}
function test2(x) {
  return VALID_STRINGS_DICT[x] === true
}


!



! !



, . , — VALID_STRINGS. :



// 
const VALID_STRINGS = ['somestring', 'anotherstring']
//    ,     
const VALID_STRINGS_DICT = { somestring: true, anotherstring: true }

const underwaterRock = ['somestring']

test2(underwaterRock) //  true


underwaterRocktrue. , test2(x) x .



VALID_STRINGS_DICT[x]


— x . — . — .



['somestring'].toString() === 'somestring'


№3:



x



const VALID_STRINGS = [/* VALID STRINGS */]
const VALID_STRINGS_DICT = {}
for (let i = 0; i < VALID_STRINGS.length; i++) {
  const validString = VALID_STRINGS[i]
  VALID_STRINGS_DICT[string] = true
}
function test2(x) {
  return typeof x === 'string' && VALID_STRINGS_DICT[x] === true
}


, .



№4: Set



ES6. .



const VALID_STRINGS = [/* VALID STRINGS */]
const validStringsSet = new Set(VALID_STRINGS)

function test4(x) { return validStringsSet.has(x) }




, , .



FAQ:



  1. Typescript: , , API. typescript .

    Typescript. , unknown any. , javascript.
  2. " , , , !"

    — )
  3. includes ? , , .
  4. ES6? , , . №3 , . №4 , . .



All Articles