是否有一种在JavaScript ES6中初始化数组的功能方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有一种在JavaScript ES6中初始化数组的功能方法?相关的知识,希望对你有一定的参考价值。
我终于放弃并写了一个for
循环来初始化一个简单的对象数组,其中每个对象都有一个递增的计数器(id
)作为对象的属性。换句话说,我只想要:
var sampleData = [{id: 1},{id: 2},...];
我希望有一个紧凑的语法,我可以把它放在我的返回语句上。
let sampleData = [];
for (var p = 0; p < 25; p++){
sampleData.push({id: p});
}
return {
data: sampleData,
isLoading: true
};
答案
Array.from()
是一个很好的方式来做到这一点。您可以传递{length: somlength}
对象或其他类似数组的对象以及定义每个项目的函数。第一个参数(称为_
只是为了表明它没有被使用)到该函数将是我们传入的数组中的项(但我们只传入一个长度所以它并不意味着太多),第二个i
是索引,用于你的id
:
let sampleData = Array.from({length: 10}, (_, id) => ({id}))
console.log(sampleData)
另一答案
我通常做的是:
const data = Array(10).fill().map((v, i) => ({id: i + 1}))
fill
确保它可以与map
一起使用
另一答案
您可以将spread
运算符与Array
一起使用,然后将每个undefined
元素映射到您想要的对象。
var arr = [...Array(10)].map((_,i)=>({id:i}));
console.log(arr)
另一答案
你正在寻找一个变形,或反向折叠 -
// unfold : ( (r, state) -> List r, () -> List r, state ) -> List r
const unfold = (f, init) =>
f ( (x, next) => [ x, ...unfold (f, next) ]
, () => []
, init
)
// sampleData : List { id: Int }
const sampleData =
unfold
( (next, done, i) =>
i > 25
? done ()
: next ({ id: i }, i + 1)
, 0
)
console.log (sampleData)
// [ { id: 0 }, { id : 1 }, ... { id: 25 } ]
另一答案
.from()
的例子很棒但是如果你真的想要有创意,请查看这个。
const newArray = length => [...`${Math.pow(10, length) - 1}`]
newArray(2)
newArray(10)
但是受到严重限制
newArray(1000)
["I", "n", "f", "i", "n", "i", "t", "y"]
另一答案
您可以使用简单的递归过程来执行此操作。
const iter = (arr, counter) => {
if (counter === 25) return arr;
return iter([...arr, {id:counter}], counter + 1)
}
iter([], 0)
以上是关于是否有一种在JavaScript ES6中初始化数组的功能方法?的主要内容,如果未能解决你的问题,请参考以下文章
在 Javascript/Node 中运行函数数组的规范方法
Javascript 方法从 1970-01-01 中查找毫秒数? [复制]
这是一种在 javascript 中实例化类的方法吗? [复制]
是否有一种全局方法来捕获 javascript 中的网络错误