我对“关键”的价值从何而来感到困惑。当我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参数的当前索引(因为该参数位于第二位置)。

09-25 17:18