gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:26:02 25 4
gpt4 key购买 nike

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

当“数组”超过一个元素时...它实际上是一个数组,因此我的 for...ofarray.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;
}

最佳答案

由于 myArray 类型是一个数组,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;
}

关于Javascript 处理长度可能只有一个元素的数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58991591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com