Javascript 处理长度可能为一个元素的数组的最佳方法

我意识到可能是主观的......但我在循环“数组”时遇到了问题。


当“阵列”是多个元素......它实际上是一个数组,所以我for...of和array.forEach做工精细。


但是如果函数只接收一个项目,那么它就不是一个数组,它只是一个对象,我遇到了问题。


我通过将它包装在 if 语句中解决了这个问题,但是每次我循环遍历实际上可能是单个对象而不是对象数组的东西时,这似乎有点疯狂。


async function writeToDB(myArray: []) {

  const db = await openDB("DomainsDB", 1);

  const tx = db.transaction("Domains", "readwrite");


  if (myArray.length > 1) {

    myArray.forEach(async(r: any) => {

      await tx.store.add(r["SearchHeader"]);

    });

  } else {

    await tx.store.add(myArray["SearchHeader"]);

  }

  await tx.done;

}


qq_花开花谢_0
浏览 105回答 1
1回答

德玛西亚99

由于myArraytype 是一个数组,TypeScript 应该阻止您分配单个项目。如果您使用不支持类型的 Javascript,或者使用删除构建时键入的 babble 插件(在这种情况下,IDE 应该警告您),就会发生这种情况。JS中这个问题的可能解决方案:您可以连接myArray到一个空数组。如果myArray是数组或单个项目,则结果将始终是数组:async function writeToDB(myArray: []) {  const db = await openDB("DomainsDB", 1);  const tx = db.transaction("Domains", "readwrite");  const arr = [].concat(myArray); // the result is always an array  arr.forEach(async(r: any) => {    await tx.store.add(r["SearchHeader"]);  });  await tx.done;}另一种选择是分配myArray给另一个数组,并使用Array.flat():async function writeToDB(myArray: []) {  const db = await openDB("DomainsDB", 1);  const tx = db.transaction("Domains", "readwrite");  const arr = [myArray].flat(); // the result is always an array  arr.forEach(async(r: any) => {    await tx.store.add(r["SearchHeader"]);  });  await tx.done;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript