Array.prototype.fill()
写表格组件时,添加条目,需要创建包含n个空对象的数组,于是试一波array.fill(),Array.prototype.fill() 的用法是,指定某个值来填充数组.
起初写的是Array(3).fill([]),瞬间造出了[[],[],[]]。然后开始填数据,问题来了,往第一数组中push了一个串,结果三个数组都有了一样的值,真是有福同享···
好吧,查文档:
- 当一个对象被传递给
fill方法的时候, 填充数组的是这个对象的引用。 也就是说三个小数组其实是同一个数组的指针,只是复制了三次。这里可以用Array.map(),循环返回三个不同的空对象就好了, 于是有了:
Array(3).fill([]).map(() => ([]))
这样就实现了返回三个不同的空对象。不过ie完全不支持(那位小哥写的有兼容方法),哈哈,不管了。
参考文章: juejin.cn/post/684490…
如何让for循环中的异步请求完成后再执行后续操作
1.如果是一层for循环:
let flag=0;
for(let i=0; i<length; i++){
//异步操作
service.then(() => {
flag++;
if(flag===length){
console.log("All Promise finished");
}
})
2.多层for循环的时候:
async save () {
for(let i=0; i<length1; i++){
for(let j = 0; j < length2; j++) {
// 异步操作 || 多重异步操作往后叠加
await service1.then(() => {
xxx
})
console.log("All Promise finished");
}
}
}
这里有个小问题,一开始循环用的是forEach,处理异步请求用的async await,但是报错了,查了资料说: forEach 只支持同步代码。
3.vue中v-for多层嵌套时,需要注意v-bind:key的值,每层循环中的key值不能一样,否则会报错。