JS遍历数组分配数据时如何为生成的用户名配置唯一随机后缀
问题原因
原有代码每次生成用户名时都从randomWord数组完全随机取值,没有记录已使用的后缀,因此会出现重复命中相同元素的情况。
解决方案
由于你的people数组长度和randomWord数组长度一致,刚好可以给每个用户分配唯一后缀,先将无意义词数组打乱顺序,再按遍历的下标对应分配即可:
const people = [{ name: 'frank', age: 20, position: 'front-end-developer', value: 7 }, { name: 'craig', age: 27, position: 'back-end-developer', value: 7 }, { name: 'peter', age: 23, position: 'database-manager', value: 6 }, { name: 'andy', age: 29, position: 'full-stack-developer', value: 9 } ]; // 无意义词数组提至全局,提前打乱顺序 const randomWord = ['donec', 'pellentesque', 'facilisis', 'potenti'] const shuffledWords = [...randomWord].sort(() => 0.5 - Math.random()) const salaryGenerator = (person) => { return '$' + (person.value * 10 / 5 * 15 + 200) }; const sentenceGenerator = (person) => { return person.name + ' is ' + person.age + ' who works as a ' + person.position } // 传入遍历下标,取对应位置的唯一后缀 const userNameGenerator = (person, index) => { return person.name + (person.age * person.value + 300) + shuffledWords[index] } const salary = people.map(salaryGenerator) const sentence = people.map(sentenceGenerator) const userName = people.map(userNameGenerator) console.log(salary) console.log(sentence); console.log(userName);
扩展说明
如果后续people数组长度超过randomWord数组长度,你可以先将randomWord数组复制多份拼接后再整体打乱,再按下标取值,即可保证所有后缀不重复。
内容的提问来源于stack exchange,提问作者Kavin Ganesh R
相关产品推荐
相关产品推荐

