Tengo una pregunta simple, ¿qué método más simple conoces para reemplazar el método some
para NodeList? Este some
es solo para el prototipo de matriz.
Actualmente se me ha ocurrido la idea bastante extravagante de iterar y mantener un valor booleano en una variable; sin embargo, me gustaría conocer su punto de vista.
Mi enfoque oscuro
const toCheck = (elem) => elem.checked; const methodSome = (list, fn) => { let result = false; for (let i = 0; i < list.length; i++) { if (fn(list[i])) { result = true; break; } } return result; }; const elems = document.querySelectorAll(`[name="something"]`); const hasBeenChecked = methodSome(elems, toCheck);
Como han mencionado otros, el operador de propagación puede poner elementos en una matriz.
Un enfoque más simple es usar el selector de :checked
con una llamada a document.querySelector()
(en lugar de usar document.querySelectorAll()
). ¡¡El operador Doble NOT !!
se puede utilizar para convertir el elemento en un valor booleano.
const hasBeenChecked = !!(document.querySelector(`[name="something"]:checked`));
Con este enfoque, no es necesario colocar elementos en una matriz y tener una función con un ciclo para verificar esos elementos.
Vea un ejemplo aquí:
const hasBeenChecked = !!(document.querySelector(`[name="something"]:checked`)); console.log('hasBeenChecked: ', hasBeenChecked);
<div><input type="checkbox" name="something" /> something?</div> <div><input type="checkbox" name="something" checked /> something?</div> <div><input type="checkbox" name="something" /> something?</div> <div><input type="checkbox" name="something" checked /> something?</div>
Utilice el operador de propagación para convertir una lista de nodos en una matriz
const hasBeenChecked = [...elems].some(toCheck);
Conviértalo en una matriz primero:
Con operador de propagación:
const toCheck = (elem) => elem.checked; const methodSome = (list, fn) => { let result = false; for (let i = 0; i < list.length; i++) { if (fn(list[i])) { result = true; break; } } return result; }; const elems = document.querySelectorAll(`[name="something"]`); const hasBeenChecked = [...elems].some(toCheck);
Con Array.from
const toCheck = (elem) => elem.checked; const methodSome = (list, fn) => { let result = false; for (let i = 0; i < list.length; i++) { if (fn(list[i])) { result = true; break; } } return result; }; const elems = document.querySelectorAll(`[name="something"]`); const hasBeenChecked = Array.from(elems).some(toCheck);