记录

149 阅读1分钟

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值不能一样,否则会报错。