Ho provato a pubblicare questa domanda su StackOverflow ma mi hanno detto di provarlo qui perché non è così specifico. Mi piacerebbe conoscere il nome dell'algoritmo o della tecnica di implementazione successiva. Mi chiedo se questa cosa sia presente nelle librerie standard di altri linguaggi (la mia implementazione è in Javascript).
Considera una funzione che richiede la raccolta / iterable e l'indice che deve restituire gli elementi che circondano / sono vicini all'indice (compreso l'elemento nell'indice). È possibile specificare anche il numero di articoli restituiti.
Questo è l'output della funzione:
const ary = [3, 4, 5, 7, 8, 20, 21, 23, 600, 120]
// Get item on index and four another items surrounding it
const result = getCollectionAround(ary, 5, 4)
// -> console.log(result)
[7, 8, 20, 21, 23]
Il trucco è di restituire gli elementi da questa funzione anche se l'indice è l'ultimo / primo (il che significa ottenere l'elemento nell'ultimo indice e quattro prima di esso). Dovresti sempre recuperare la quantità corretta di elementi anche se stai colpendo l'inizio / la fine dell'array (questo significa che devi recuperarlo aggiungendo o anteponendo altri elementi).
Questa è l'implementazione
getCollectionAround(collection, referenceIndex, amount) {
const totalCount = collection.length
const requestedCount = Math.floor(totalCount * amount)
let startIndex = Math.max(0, Math.round(referenceIndex - (requestedCount / 2)))
if (startIndex + requestedCount > collection.length) {
startIndex = Math.max(0, collection.length - requestedCount - 1)
}
// NOTE: + 1 include last index
return collection.slice(startIndex, startIndex + 1 + requestedCount)
}
Grazie per eventuali lead. Il motivo per cui lo chiedo è perché potrei usarlo molto e preferirei usare una libreria leggera JS (o almeno un modulo da esso) che farebbe questo per me o forse creare il mio pacchetto per esso se non ce n'è.