我对“关键”的价值从何而来感到困惑。当我console.log时,该数组中的每个对象都有一个键
当我生成contactsOnly(通过返回映射中的每个元素)时,我只是得到一个没有任何键的联系人数组。
如果再调用addKeys(contactsOnly),则最终得到一个对象,而不是一个数组,并且对象被编号。密钥未定义。
映射函数的索引是否以某种方式传递给addKeys?
const firstNames = ['Emma','Noah','Olivia','Liam','Ava','William','Sophia']
const lastNames = ['Smith','Jones','Brown','Johnson','Williams']
// generate a random number between min and max
const rand = (max, min = 0) => Math.floor(Math.random() * (max - min + 1)) + min
// generate a name
const generateName = () => `${firstNames[rand(firstNames.length - 1)]} ${lastNames[rand(lastNames.length - 1)]}`
// generate a phone number
const generatePhoneNumber = () => `${rand(999, 100)}-${rand(999, 100)}-${rand(9999, 1000)}`
// create a person
const createContact = () => ({name: generateName(),
phone: generatePhoneNumber()})
// add keys to based on index
const addKeys = (val, key) => ({key, ...val})
// create an array of length NUM_CONTACTS
const contactList = Array.from({length: 5}, createContact).map(addKeys)
console.log(contactList)
const contactsOnly = Array.from({length: 5}, createContact).map(i=>i)
console.log(contactsOnly)
const contactsAdded =addKeys(contactsOnly)
console.log(contactsAdded)
最佳答案
要直接回答这个问题:
映射函数的索引是否以某种方式传递给addKeys?
是。
数组的.map
method接受一个回调,该回调将传递三个参数:
当前数组元素
当前数组索引
数组本身
因此,由于您的函数addKeys
具有两个参数,并且直接将其传递给map,因此它正在接收其key
参数的当前索引(因为该参数位于第二位置)。