获取嵌套 for 循环的"Fatal error in , line 0 # Fatal JavaScript invalid size error 178414678"



所以我有这个简单的Javascript代码,我在其中比较数据库存储的购物车项目和客户端发送的新购物车项目。但我得到了一个我以前从未见过的新错误:

#
# Fatal error in , line 0
# Fatal JavaScript invalid size error 178414678
#
#
#
#FailureMessage Object: 000000DCF17BE620
1: 00007FF7F50A401F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+112511
2: 00007FF7F4FC116F v8::CFunctionInfo::HasOptions+7055
3: 00007FF7F5C97302 V8_Fatal+162
4: 00007FF7F5820C65 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArray+101
5: 00007FF7F56CA463 v8::internal::FeedbackNexus::ic_state+62771
6: 00007FF7F56E0FC0 v8::Message::GetIsolate+15840
7: 00007FF7F5555681 v8::internal::CompilationCache::IsEnabledScriptAndEval+26849
8: 00007FF7F59F34B1 v8::internal::SetupIsolateDelegate::SetupHeap+494417
9: 000001F9C44485C2

代码所做的是,它检查两个数组中的产品id是否相同。如果是,则它将仅用client-sent cart item单元替换database cart item单元。如果不是,那么它将只是将client-sent cart item推送到database-stored cart items阵列。这就是它所做的一切。

代码:

const dbCartItems = [
{ productID: '1233433', unit: 1 },
{ productID: 'asfa34wr', unit: 2 }
];
const clientCartItems = [
{ productID: 'dfhgdf46t3', unit: 4 },
{ productID: 'hgfh566', unit: 1 },
{ productID: '32523', unit: 1 }
];
for ( let i = 0; i < dbCartItems.length; i++ ) {
for ( let j = 0; j < clientCartItems.length; j++ ) {
if ( dbCartItems[ i ].productID === clientCartItems[ j ].productID ) {
dbCartItems[ i ].unit = clientCartItems[ j ].unit;
} else {
dbCartItems.push( clientCartItems[ j ] );
}
}
}
console.log( dbCartItems );

有人能解释一下代码出了什么问题吗?它抛出了这种我以前从未见过的错误?

您的完整逻辑是错误的。您正在使用嵌套循环,即使您使用新的数组来存储其中的项目,也会获取错误的结果。

你的代码应该是这样的:

// get all product ids from dbCartItems array
const dbCartItemsProductIds = dbCartItems.map(cartItem => cartItem.productID);
for(let i=0;i<clientCartItems.length;i++) {
const indexOfClientItemInDb = dbCartItemsProductIds.indexOf(clientCartItems[i].productID);
// if clientCartItemProductId found in dbCartItemsProductIds
if(indexOfClientItemInDb!== -1) {
dbCartItems[indexOfClientItemInDb].unit = clientCartItems[i].unit;
} else {
dbCartItems.push(clientCartItems[i]);
}
}

首先,从dbCartItems中获取所有productIds(以匹配clientCartItems中的productids。现在,对于每个clientCartItems,检查项目产品id是否存在于dbCartItemsProductIds中,然后更改单位数量,否则将项目添加到dbCartItems

您正在不断添加到同一个数组中,这将导致一个无限循环。制作一个新数组并添加项目。

我的Angular应用程序(从Angular版本13升级到14(中也遇到了这个问题:

#
# Fatal error in , line 0
# Fatal JavaScript invalid size error 169242095
#
#
#
#FailureMessage Object: 000000A21E2FE930
1: 00007FF7CCF1401F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+112511
2: 00007FF7CCE3116F v8::CFunctionInfo::HasOptions+7055
3: 00007FF7CDB07302 V8_Fatal+162
4: 00007FF7CD690C65 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArray+101
5: 00007FF7CD53A463 v8::internal::FeedbackNexus::ic_state+62771
6: 00007FF7CD550FC0 v8::Message::GetIsolate+15840
7: 00007FF7CD3C5681 v8::internal::CompilationCache::IsEnabledScriptAndEval+26849
8: 00007FF7CD8634B1 v8::internal::SetupIsolateDelegate::SetupHeap+494417
9: 000001D976B66A25

我已经将@types/node的版本更新为LTS。这个问题已经解决了。我认为该版本不支持Angular 14v

如果在Angular js、React js或任何其他js框架中遇到这个问题。

  • 删除node_modules
  • 安装节点模块(npm i(

将一些依赖项移到devDependencies。

对于我的react项目,解决方案是:

移动";反应脚本":"5.0.1〃;package.json 中从依赖项到devDependencies

相关内容

最新更新