js 如何保存循环内的变量,然后循环外使用这个变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 如何保存循环内的变量,然后循环外使用这个变量?相关的知识,希望对你有一定的参考价值。

var luren1 = [];var i,j;有这么一个循环:for (i=1;i<rows.length-5;i++)for (j=0;j<rows[i].cells.length;j++)luren1 = rows[i].cells[j].innerhtml;现在的问题就是在第二个循环体内打印变量是正常的,但是如果在循环外打印的话,就只会打印该变量的最后一个值。

如果变量定义在循环内部则做不到,循环结束变量就销毁了。不过可以把相应变量定义在循环外部。
样例程序

#include <iostream> int main() for (int i = 0; i != 1; ++i); std::cout << i << std::endl; //出错 return 0;

#include <iostream> int main() int i = 0; for (; i != 1; ++i); std::cout << i << std::endl; //输出1 return 0;追问

我现在已经把变量定义在循环体外部了

参考技术A luren1 = rows[i].cells[j].innerHTML
你把这句改成
luren1.push(rows[i].cells[j].innerHTML);然后打印luren1就好了
参考技术B 没明白你什么意思,说清楚点,你是要用那个luren1么,没看出你上面的那个双循环有任何含义。追问

对的 我就是想用路人1这个变量 假如我定义的时候luren1 i j放在循环体内 也是一样的结果 所以我就想尝试把这两个变量变为全局变量

追答

还是没懂你具体啥意思,你就讲你要实现什么目的吧,或者要实现什么样的效果。

追问

我就是想把这个循环体内的变量luren1保存 然后可以在循环外调用这个luren1变量 打印出可以像图1的效果 而不是该变量luren1的最后一个值(图2)

追答

你循环体里那个luren1是多个值,不能这样用,如果你想用可以改成成类似这种,比如
luren=[];
for(i=1;i<rows.length-5;i++)

for(j=0;j<rows[i].cells.length;j++)
luren.push(rows[i].cells[j].innerHTML);

之后你在循环外就可以用比如
for(i=0;i<luren.length;i++) console.log(luren[i]);这种来用了,所以我才问你最终目地是什么

本回答被提问者采纳

使用变量作为列表名称附加到循环内的列表

【中文标题】使用变量作为列表名称附加到循环内的列表【英文标题】:appending to a list inside a loop using a variable as the list name 【发布时间】:2022-01-20 17:43:23 【问题描述】:

我的目标是从几个文件的内容中创建几个列表。过去,我在循环内部使用 ''.format(x) 作为更改循环内部路径以匹配循环正在处理的列表中的任何项目的方法。现在我想将其扩展到附加到循环外的列表。这是我目前使用的代码。

import csv
import os

c3List = []
c4List = []
camList = []
plantList = ('c3', 'c4', 'cam')

for p in plantList:
    plantFolder = folder path
    plantCsv = 'List.csv'.format(p)
    plantPath = os.path.join(plantFolder, plantCsv)
    with open(plantPath) as plantParse:
        reader = csv.reader(plantParse)
        data = list(reader)
        'List'.format(p).append(data)

但这给了我 AttributeError: 'str' object has no attribute 'append'

如果我尝试制作这样的变量

pList = 'List'.format(p)
pList.append(data)

我得到同样的错误。任何意见,将不胜感激。我正在使用 Python 3。

【问题讨论】:

str.format() 返回一个没有.append()字符串。您不能简单地通过创建其名称的字符串来引用变量 这可能与您的问题有关:How do I create a variable number of variables 我希望它第一次循环通过它以获取 c3List.csv 中的项目并将其添加到 c3List,然后 c4List.csv 并添加到 c4List,然后 camList.scv 并添加到 camList。我会查看您提供的变量链接,看看我能找到什么。 这能回答你的问题吗? How do I create variable variables? 【参考方案1】:

因为列表对象是可变的,您可以创建一个引用所有列表的字典。

例如:

myList = []
myDict = "a": myList

myDict["a"].append("appended_by_reference")
myList.append("appended_directly")

print(myList)

您将得到['appended_by_reference', 'appended_directly'] 打印。

如果您想了解更多关于 python 中的 mutabilityimmutability 的信息,请参阅link。

所以我自己实现目标的实现是:

import csv
from pathlib import Path

c3List = []
c4List = []
camList = []
plantList = 'c3': c3List, 'c4': c4List, 'cam': camList

plantFolder = `folder path`
for p in plantList:
    plantCsv = f'pList.csv'
    plantPath = Path(plantFolder, plantCsv)
    with open(plantPath) as plantParse:
        reader = csv.reader(plantParse)
        data = list(reader)
        plantList[p].append(data)

注意:我使用fstring 来格式化字符串并使用pathlib 来定义文件路径

【讨论】:

以上是关于js 如何保存循环内的变量,然后循环外使用这个变量?的主要内容,如果未能解决你的问题,请参考以下文章

React.js setState() 与循环内的键变量?

js怎么循环出变量,然后一个个储存到数组中?

循环作用域问题

我如何在 for 循环外使用 for 循环范围变量形式?

JS中for循环变量作用域

在 Laravel 中的 for 循环外访问变量