任意の数のオブジェクト要素を含んだ配列を返す関数について
Q&A
解決したいこと
プロジェクトの参考にしたコードで、構造が理解できない箇所があります。
以下のmakeData関数はオブジェクト要素を任意の数だけ含んだ配列を作成する関数なのですが、なぜこのコードで作成できるのか分かりません。
例えば、makeData(3)の場合、以下のオブジェクトが3つ入った配列を返します。
{firstname:…, lastname:…, subRow: undefined}
なぜ以下のような値にならないのでしょうか?
{firstname:…, lastname:…, subRow:{
firstname:…, lastname:…, subRow:{
firstname:…, lastname:…, subRow:{…
…
}
どなたかご回答いただければ幸いです。
該当するソースコード
//名前をランダムに生成する
import namor from 'namor'
const range = len => {
const arr = []
for (let i = 0; i < len; i++) {
arr.push(i)
}
return arr
}
const newPerson = () => {
return {
firstName: namor.generate({ words: 1, numbers: 0 }),
lastName: namor.generate({ words: 1, numbers: 0 })
}
}
//makeDataの引数で数字を受け取った場合、
//例えば3の場合、lensは[3]となり、lenは3、
//range(len)は[0,1,2]となる
export default function makeData(...lens) {
const makeDataLevel = (depth = 0) => {
const len = lens[depth]
return range(len).map(d => {
return {
...newPerson(),
subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined,
}
})
}
return makeDataLevel()
}
0 likes