Vale lembrar que isso só vale a pena se tiver um array muito grande e forem feitas muitas buscas. Afinal, há um custo inicial para criar o índice de usuários por idade (tanto em tempo quanto em memória), e nem sempre compensa.

Se você só precisa buscar uma ou duas idades, por exemplo, aí um for simples no array é mais rápido. Fiz uns testes usando o Benchmark.js e só a partir de 10 buscas (ou seja, buscar por 10 idades diferentes) começou a valer a pena. Com menos que isso, fazer vários for no array (um para cada idade a ser buscada) foi mais rápido. Testando no JSBench.ME, os resultados foram similares: com poucas buscas, o for simples é mais rápido, e a partir de umas 12 buscas, a sua solução se tornou mais rápida.


Claro que os números exatos podem variar caso a caso, e depende muito do ambiente, dos dados e das buscas feitas. E se forem arrays muito pequenos e/ou poucas buscas, a diferença será irrisória e até imperceptível.

De qualquer forma, temos aqui um exemplo do clássico trade-off (em bom português: "cada escolha, uma renúncia") de tempo e espaço: o programa pode rodar mais rápido, o que compensa o uso extra de memória. Mas tem casos em que não haverá esse ganho. É bom saber que você pode usar essa solução caso precise, mas também é importante saber quando não precisa :-)

Muito bem colocado. Como toda funcionalidade, precisamos analisar e verificar a melhor solução para aquele escopo.

Em hipotese alguma um script vai ser "bala de prata". Tudo vai ter seu lado positivo e negativo.

E indo um pouco mais além, daria para criar vários índices para propriedades diferentes: ```javascript const users = [ { age: 37, salary: 10000, name: "Moore Hampton" }, { age: 25, salary: 30000, name: "Stephanie Clayton" }, { age: 30, salary: 30000, name: "Pratt Cash" }, { age: 21, salary: 1000, name: "Kenya Gould" }, { age: 38, salary: 10000, name: "Dodson Romero" }, { age: 34, salary: 1000, name: "Weiss Bush" }, { age: 27, salary: 10000, name: "Myrtle Hatfield" }, { age: 36, salary: 10000, name: "Bertie Spencer" }, { age: 35, salary: 5000, name: "Fisher Arnold" }, { age: 24, salary: 10000, name: "Susie Hebert" }, { age: 37, salary: 10000, name: "Beth Lloyd" }, { age: 24, salary: 10000, name: "Keisha Gilliam" }, { age: 38, salary: 3000, name: "Rachel Schultz" }, { age: 25, salary: 1500, name: "Jeanine Flores" }, { age: 27, salary: 10000, name: "Jensen Maddox" }, { age: 24, salary: 1500, name: "Callie Crawford" }, { age: 22, salary: 3000, name: "Campbell Chase" }, { age: 39, salary: 15000, name: "Collins Mercado" }, { age: 38, salary: 10000, name: "Cantu Mcclure" }, { age: 37, salary: 10000, name: "Duffy Buckley" }, { age: 36, salary: 30000, name: "Suzette Navarro" }, { age: 40, salary: 1000, name: "Aida Murray" }, { age: 35, salary: 15000, name: "Alyssa Humphrey" } ]; function criarIndices(dados, ...propriedades) { const indices = {}; // já deixa criado um índice para cada propriedade for (const prop of propriedades) { indices[prop] = {}; } // para cada elemento, adiciona no respectivo índice de cada propriedade for (const item of dados) { for (const prop of propriedades) { if (! indices[prop][item[prop]]) { indices[prop][item[prop]] = [] } indices[prop][item[prop]].push(item); } } return indices; } const indices = criarIndices(users, 'age', 'salary'); console.log(indices.age[35]); console.log(indices.salary[1000]); ``` Assim só precisa processar o array uma vez, e já deixa criado vários índices. --- Eu não verifiquei se as propriedades existem em cada um dos items do array, então fica como exercício para o leitor :-)