Array.from如何生成关键字

时间:2018-05-01 19:49:07

标签: javascript arrays

我对'key'的价值来自哪里感到困惑。当我在console.log中时,contactsList中的每个对象都有一个键

当我生成contactsOnly时(通过返回地图中的每个元素),我只得到一个没有任何键的联系人数组。

如果我然后调用addKeys(contactsOnly),我最终会得到一个OBJECT,而不是一个数组,并且对象已编号。密钥未定义。

map函数的索引是否以某种方式传递给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)

1 个答案:

答案 0 :(得分:4)

直接回答这个问题:

  

map函数的索引是否以某种方式传递给addKeys?

数组的.map method接受将传递三个参数的回调:

  • 当前数组元素
  • 当前数组索引
  • 阵列本身

因为你的函数addKeys有两个参数,并且你直接将它传递给map,它正在接收它的key参数的当前索引(因为那是第二个位置的参数)。