¿Cómo escribiría una función en JS para lo siguiente: Obtenga el subarreglo de todos los elementos:
Estas pruebas deben pasar:
expect(elementsStartingFrom([1, 3, 5, 7, 9, 11], 1)).toEqual([1, 3, 5, 7, 9, 11]); expect(elementsStartingFrom([1, 3, 5, 7, 9, 11], 2)).toEqual([3, 5, 7, 9, 11]); expect(elementsStartingFrom([1, 3, 5, 7, 9, 11], 3)).toEqual([3, 5, 7, 9, 11]); expect(elementsStartingFrom([1, 3, 5, 1, 4, 5], 2)).toEqual([3, 5, 1, 4, 5]);Primero, use indexOf para ver si el elemento está en la lista. De lo contrario, filter cualquier cosa menor que, sort eso para obtener el siguiente más grande, luego use indexOf para encontrar el índice de eso. Finalmente, use slice para obtener la parte de la matriz:
const elementsStartingFrom = (haystack, needle) => { let idx = haystack.indexOf(needle); if (-1 == idx) { const tmp = haystack.filter(i => i > needle).sort((a, b) => a - b).at(0); idx = haystack.indexOf(tmp); } if (idx == -1) return null; else return haystack.slice(idx); }; Puede eliminar la primera llamada a indexOf y obtener el mismo resultado cambiando < a <= :
const elementsStartingFrom = (haystack, needle) => { const tmp = haystack.filter(i => i >= needle).sort((a, b) => a - b).at(0); const idx = haystack.indexOf(tmp); return (idx == -1) ? null : haystack.slice(idx); };