此问题在此处已有答案:
Looping through array and removing items, without breaking for loop(18个答案)
2天前关闭。
上下文
你好,我有一个JSON文件,其中包含类似于以下内容的对象列表:
[{
"Codigo":"01",
"Descricao":"Animais vivos.",
"Data_Inicio":"01/04/2022",
"Data_Fim":"31/12/9999",
"Tipo_Ato":"Res Camex",
"Numero_Ato":"272",
"Ano_Ato":"2021"
},
{
"Codigo":"0102.31",
"Descricao":"-- Reprodutores de raça pura",
"Data_Inicio":"01/04/2022",
"Data_Fim":"31/12/9999",
"Tipo_Ato":"Res Camex",
"Numero_Ato":"272",
"Ano_Ato":"2021"
}, .....]
字符串
上面的列表有15075个对象。我正在编写一个脚本,检查“Codigo”是否有超过6个字符,如果是,它将弹出列表。
问题
我尝试使用JavaScript和python来实现它,在两种语言中都遇到了同样的问题。
- JavaScript*
for(var i= 0; i <Nomenclaturas.length; i++){
if(Nomenclaturas[i].Codigo.length>6){
Nomenclaturas.splice(i,1)
}
}
console.log(Nomenclaturas.length)
//result = 8180
型
JavaScript中的代码不能完成它的工作,因为我的列表中Codigo.length>6的一些对象没有被删除。奇怪的是,如果我多次重复上面的相同代码块,它就可以工作了:
for(var i= 0; i <Nomenclaturas.length; i++){
if(Nomenclaturas[i].Codigo.length>6){
Nomenclaturas.splice(i,1)
}
}
console.log(Nomenclaturas.length)
//result = 8180
for(var i= 0; i <Nomenclaturas.length; i++){
if(Nomenclaturas[i].Codigo.length>6){
Nomenclaturas.splice(i,1)
}
}
console.log(Nomenclaturas.length)
//result = 4646
for(var i= 0; i <Nomenclaturas.length; i++){
if(Nomenclaturas[i].Codigo.length>6){
Nomenclaturas.splice(i,1)
}
}
console.log(Nomenclaturas.length)
//result = 2984
型
当我重复代码块7次时,它会做它应该做的事情。我在python中尝试了相同的脚本:
for i, nome in enumerate(nomeclaturas):
if(len(nome['Codigo'])>6):
del nomeclaturas[i]
print(len(nomeclaturas))
#result = 8180
型
我也有同样的问题,它不能在完成时工作,当我重复代码“for”代码块时它工作。
我的操作系统:
Windows 11家庭版64位(10.0,内部版本22621)
你可以在这里下载这个JSON:
https://portalunico.siscomex.gov.br/classif/#/nomenclatura/tabela?perfil=publico
选择“tabela vigente”和“JSON”
1条答案
按热度按时间snz8szmq1#
Python中对JSON文件的大小没有严格限制,但这取决于可用内存等因素。大文件可能会导致内存问题。考虑使用
json.loads()
等工具和流方法处理大文件,或使用ijson
等外部库进行高效解析。