DevTools上的功能称为“覆盖范围”
https://developer.chrome.chrome.com/docs/ DevTools/coverage/
使您看到使用了多少个字节,
有多少不是。
您也可以使用它来查看哪些选择器没有用!
蓝线的意思是:使用CSS
红色的手段:不使用CSS
不重要的漫步:我使用node-postgres
(又称NPM软件包pg
)具有完全相同的问题。它似乎几乎竭尽所能超越客户。确实可以执行您所描述的内容 - 将常规对象作为“错误”传递,而不是错误
或只是投掷。我终于找到了一种可靠的方法来处理此问题,但是它不是很漂亮。
在定义makehttprequest
时,立即存储当前stack
。稍后,在函数(在您的catch
中)中,您可以使用错误记录。
示例使用您的代码:
export const makeHttpRequest = (requestData) => {
// tracking origin as soon as request begins
// no callbacks or promises involved yet
const _stack = new Error().stack;
return externalLib(requestData)
.catch(err => {
// I don't know enough about your code so I'm just adding what I do + what your original did.
// Play with it if needed
console.log(`error occurred - origin stack: ${_stack}`);
throw new Error(JSON.stringify(err));
});
}
请注意 - 如果您的此异步代码以更多嵌套的异步代码运行(进一步添加到线上 - 回调地狱,请保证炼狱),您将继续遇到相同的问题原因(回调在不同的时间从其他地方发射到另一个堆栈上 - 对堆栈没有意识,将其添加到队列中)。
如果您有大量的嵌套路线和/或连续的中间件,则可能还需要调整堆栈的显示多少。将其放在函数的顶部:
Error.stackTraceLimit = 40;
// or ...
// Error.stackTraceLimit = 3;
// or ...
// Error.stackTraceLimit = Infinity;
// etc.
如果您喜欢- stack-trace-limit = ...
,也有一个节点标志。两者都是执行上下文的全局(节点 - 每个进程,chrome-每个窗口/iframe)。更多信息在这里: https://v8.dev/docs/stack-trace-trace-trace-api
将数据不合同。为识别连接记录的父母和孩子添加钥匙。将所有内容都放入一个索引中。您的搜索将变得更快,并且不会使用太多CPU。
停止完全使用父子映射。浪费时间和记忆。
Hth。
我相信,将链接更改为
参数以包含/
(slash)在开始时解决您的问题。最终元素应该看起来像这样:< link =“/register”> register</link>
这是可以在基础Python中进行的,但是如果您正在进行更大的项目,我强烈建议您使用统计软件包(特别是numpy
pandas )来执行此操作。这是因为随着数据集的增长,Numpy和Pandas以比基本Python更有效的方式存储数据。 (请参阅本文以获取更多信息)。
使用pandas
:
import pandas as pd
fullTime= []
file = open('traffic_input.txt').read().split('\n')
for counter, line in enumerate(file):
data.append(line_information(line))
#create dataframe
data= pd.DataFrame(fullTime)
#split columns into starting time (sensor 1), ending time (sensor 2), and license plate
data["startingTime"] = data[fullTime].split()[1]
data["endingTime"] = data[fullTime].split()[4]
data["licensePlate"] = data[fullTime.split()[2]
#use elapsed time function to create a new column in the dataframe with elapsed time
data["elapsedTime"] = elapsed_time(data["startingTime"], data["endingTime"])
链接:
- 有关pandas的一些有用的 href =“ https://pandas.pydata.org/docs/getting_started/intro_tutorials/05_add_columns.html” rel =“ nofollow noreferrer”>入门教程
- a /book/“ rel =“ nofollow noreferrer”>用于数据分析书籍的Python
如果您有理由与Base Python绝对结婚,请评论,我将进行编辑。但是,对于大多数数据分析任务,Python库使您的生活更轻松(即使他们花了一点时间才能提前学习)。
编辑由于您与基本Python绑定:
我将使用带有格式的列表[[启动时间,结束时间,经过的时间] [汽车2的启动时间,CAR 2的终止时间,经过)汽车2],...]
,这样
timeArr = []
for i in data:
thisRow = [];
startingTime = i[fullTime].split()[1]
endingTime = i[fullTime].split()[4]
thisRow.append([startingTime, endingTime, elapsed_time(startingTime, endingTime)
之后,您可以使用使用的时间访问每个车牌的经过的时间,
for i in timeArr:
print(i[2])
甚至可以将车牌号添加到原始数组的一部分中使用它可以访问它的一种ID。
您可以从file1导入数据,然后在file2中的行上循环循环,以及在环境中找到匹配
列中的匹配项,以team
之类的值更新数据。下图:
$data = Import-Csv -Path 'D:\Test\file1.csv'
foreach ($row in (Import-Csv -Path 'D:\Test\file2.csv')) {
$data | Where-Object { $_.environment -match [regex]::Escape($row.environment) } |
ForEach-Object { $_.team = $row.team }
}
# show on screen
$data | Format-Table -AutoSize
# output to new csv
$data | Export-Csv -Path 'C:\Output\combinedData.csv' -NoTypeInformation
使用[REGEX] :: ESCEAS($ row.Environment)
在您的示例数据中不需要,但是在现实生活中,该值可能包含REGEX中具有特殊含义的字符(> -Match
使用Regex)。
如果您不想使用正则表达式,则可以使用
来实现同样的表达式where -object {$ _。环境-like -like“*$($ row.Environment)*”}
在屏幕上输出:
environment team
----------- ----
storage prod geodata
storage test geodata
master prod fsd
master mds fsd
那以下疯狂的公式呢?
=IF(OR(AD2="N/A",AD2=0),0,AD2*AD$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AE2="N/A",AE2=0),0,AE2*AE$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AF2="N/A",AF2=0),0,AF2*AF$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AG2="N/A",AG2=0),0,AG2*AG$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AH2="N/A",AH2=0),0,AH2*AH$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AI2="N/A",AI2=0),0,AI2*AI$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))
假定为第2行的重量调整为第2行。将其存储为百分比(因此,如果将单元格式设置为一般,则将30%显示为0,3)。
首先构建,
如果合适的话,它首先返回给定单元的基本重量:
重量 *和( value &lt;&gt; 0, value value < /strong>&lt;&gt;“ n/a”)
AD$729*AND(AD2<>0,AD2<>"N/A")
,对行的每个单元重复:
cell 1 + 先前的cell公式的先前公式2 + 细胞3的先前公式 + 细胞4 + 先前的公式对于单元6 ,
(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A"))
用于划分价值和重量的乘积:
value * stroge /先前的公式< /strong>
AD2*AD$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A"))
实际上仅在必要时才会衡平:
if(or( value =“ n/a”, value = 0),0),0 ,以前的公式),
IF(OR(AD2="N/A",AD2=0),0,AD2*AD$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))
该行重复:
细胞1 + 先前的公式/strong> + 细胞3 + 的先前公式6
=IF(OR(AD2="N/A",AD2=0),0,AD2*AD$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AE2="N/A",AE2=0),0,AE2*AE$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AF2="N/A",AF2=0),0,AF2*AF$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AG2="N/A",AG2=0),0,AG2*AG$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AH2="N/A",AH2=0),0,AH2*AH$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AI2="N/A",AI2=0),0,AI2*AI$729/(AD$729*AND(AD2<>0,AD2<>"N/A")+AE$729*AND(AE2<>0,AE2<>"N/A")+AF$729*AND(AF2<>0,AF2<>"N/A")+AG$729*AND(AG2<>0,AG2<>"N/A")+AH$729*AND(AH2<>0,AH2<>"N/A")+AI$729*AND(AI2<>0,AI2<>"N/A")))
编辑:注释的请求
我们需要动态更改对第729行的(适当单元格中的(适当单元格)。为了实现此目的,我们将使用此公式:
indirect(硬编码列&amp;行(车辆列表的左上方单元格) - 1 +匹配(带有给定车辆的类型,车辆清单,0 )
INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))
我们将适应所需的每个单元格:
先前的参考 | 新公式 |
---|---|
AD $ 729 | 间接(“ ad” ) |
AE $ 729 | 间接(“ AE”&amp; row($ ad $ 729)-1+Match(B2,$ b $ 729:$ b $ 734,0)) |
AF $ 729 | 间接(“ AF”&amp; row($ $ aD $ 729) -1+Match(B2,$ B $ 729:$ B $ 734,0)) |
AG $ 729 | 间接(“ AG”&amp; row($ ad $ 729)-1+Match(B2,$ B $ 729:$ B $ 734,0) ) |
ah $ 729 | 间接(“ ah”&amp; row($ ad $ 729)-1+match(b2,$ b $ 729:$ b $ 734,0)) |
ai $ 729 | 间接(“ ai”&amp; row($ $ $ $ 729) - 1+匹配(B2,$ b $ 729:$ b $ 734,0)) |
因此,我们将能够相应地替换它们并获得此信息:
=IF(OR(AD2="N/A",AD2=0),0,AD2*INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AE2="N/A",AE2=0),0,AE2*INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AF2="N/A",AF2=0),0,AF2*INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AG2="N/A",AG2=0),0,AG2*INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AH2="N/A",AH2=0),0,AH2*INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))+IF(OR(AI2="N/A",AI2=0),0,AI2*INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))/(INDIRECT("AD"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AD2<>0,AD2<>"N/A")+INDIRECT("AE"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AE2<>0,AE2<>"N/A")+INDIRECT("AF"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AF2<>0,AF2<>"N/A")+INDIRECT("AG"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AG2<>0,AG2<>"N/A")+INDIRECT("AH"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AH2<>0,AH2<>"N/A")+INDIRECT("AI"&ROW($AD$729)-1+MATCH(B2,$B$729:$B$734,0))*AND(AI2<>0,AI2<>"N/A")))
第二次编辑,
我将其重新编写为公式,将其调整为新请求。尝试一下:
=IF(OR(AL2="N/A",AL2=0),0,AL2*INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))/(INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AL2<>0,AL2<>"N/A")+INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AM2<>0,AM2<>"N/A")+INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AN2<>0,AN2<>"N/A")+INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AO2<>0,AO2<>"N/A")+INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AP2<>0,AP2<>"N/A")))+IF(OR(AM2="N/A",AM2=0),0,AM2*INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))/(INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AL2<>0,AL2<>"N/A")+INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AM2<>0,AM2<>"N/A")+INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AN2<>0,AN2<>"N/A")+INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AO2<>0,AO2<>"N/A")+INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AP2<>0,AP2<>"N/A")))+IF(OR(AN2="N/A",AN2=0),0,AN2*INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))/(INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AL2<>0,AL2<>"N/A")+INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AM2<>0,AM2<>"N/A")+INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AN2<>0,AN2<>"N/A")+INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AO2<>0,AO2<>"N/A")+INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AP2<>0,AP2<>"N/A")))+IF(OR(AO2="N/A",AO2=0),0,AO2*INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))/(INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AL2<>0,AL2<>"N/A")+INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AM2<>0,AM2<>"N/A")+INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AN2<>0,AN2<>"N/A")+INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AO2<>0,AO2<>"N/A")+INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AP2<>0,AP2<>"N/A")))+IF(OR(AP2="N/A",AP2=0),0,AP2*INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))/(INDIRECT("AL"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AL2<>0,AL2<>"N/A")+INDIRECT("AM"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AM2<>0,AM2<>"N/A")+INDIRECT("AN"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AN2<>0,AN2<>"N/A")+INDIRECT("AO"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AO2<>0,AO2<>"N/A")+INDIRECT("AP"&ROW(AL$729)-1+MATCH(B2,$AK$729:$AK$734,0))*AND(AP2<>0,AP2<>"N/A")))
在这里一张表使范围更改的表更容易:
A | B | C | D | E | F | G |
---|---|---|---|---|---|---|
重量单板 | 1 | |||||
重量排 | 729 | |||||
重量列 | Al | =左(cell(单元格(“地址”,偏移),偏移(c3&amp;“ 1”) ,0,1),2,99),find(“ $”,中间(“ address”,offset(c3&amp;“ 1”),0,1),2,99)) - 1 ) | =左(中间(单元格(“地址”,偏移)(间接(D3&amp;“ 1”),0,1)),2,99),find(“ $”,mid cell(cell(“地址”,offset))间接(d3&amp;“ 1”),0,1),2,99)) - 1) | =左(中间(单元格(“地址”),偏移(间接(E3&amp;“ 1”),0,1)))))))))) ,2,99),find(“ $”,中间(“地址”,偏移(e3&amp;“ 1”),0,1),2,99)) - 1)) - 1) | =左(中(Mid)单元格(“地址”,偏移(间接(F3&amp;“ 1”),0,1),2,99),查找(“ $”,mid(cell(“地址”,偏移),偏移(f3&amp;“ 1) ”),0,1),2,99)) - 1) | |
值表 | 1 | |||||
值行 | 2 | |||||
值列 | Al | =左(中间(单元格)(“地址”,偏移(c6&amp;“ 1”),0,1),2,99),find(“ $”,MID(MID)(单元格(“地址”,偏移(间接(C6&amp;“ 1”),0,1),2,99)) - 1) | =左(cell(cell(“地址”),偏移(间接偏移(D6&amp;“ 1)) “),0,1),2,99),find(“ $”,cell(“地址”,偏移(D6&amp;“ 1”),0,1),2,99)),2,99)))))))))) -1) | =左(中间(单元格(“地址”,偏移),偏移(e6&amp;“ 1”),0,1),2,99),find(“ $”,mid(cell(“地址”,“地址”,”)偏移(间接(E6&amp;“ 1”),0,1),2,99))-1) | =左(中间(单元格(“地址”,偏移),偏移(f6&amp;“ 1”),0,1 ),2,99),find(“ $”,中间(“地址”,偏移(间接(F6&amp;“ 1”),0,1),2,99)) - 1))-1))-1) | |
案例表 | 案例 | |||||
行 | 2 | |||||
列列 | B | |||||
重量指数地址 | ! | |||||
1 | 表1 (“&amp; $ c $ 1&amp;“!”!&amp; $ c $ 3&amp;“ $” C $ 9&amp; $ C $ | 8 &amp; row(“&amp; $ c $ 1&amp;“!”!&amp; $ c $ 3&amp;“ $”&amp; $ c $ 2&amp;“) - 1+match(“&amp; $ c $ 7&amp;“!”! &amp; $ c $ | 9 “”“”&amp; row(“&amp; $ c $ 1&amp;“!”&amp; $ c $ 3&amp; amp;“ $”&amp; $ c $ 2&amp;“) - 1+match(“&amp; $ c $ 7&amp; amp; “! | ” f3&amp;“”&amp; row(“&amp; $ c $ 1&amp;“!”! ! | $ 7 “&amp; g3&amp;“”&amp; row(“&amp; $ c $ 1&amp;“!”&amp; $ c $ 3&amp; “ $”&amp; $ c $ 2&amp;“) - 1+匹配(“&amp; $ c $ 7&amp;“!”&amp; $ c $ 9&amp; $ c $ 8&c $ 8&amp;“,”,“”&amp; $ c $ 10&amp; amp;“,0)) “ | |
值 | = $ c $ 4&amp;“!” &amp; c6&amp; $ c $ 5 | = $ c $ 4&amp;“!” &amp; d6&c $ 5 | = $ c $ 4&amp;“!” &amp; e6&amp; $ c $ 5 | = $ c $ 4&amp;“!” &amp; f6&amp; $ c $ 5 | = $ c $ 4&amp;“!” &amp; g6&c $ 5 | |
重量 *和(value&lt;&gt; 0,value&lt;&lt;& | lt | ;&gt;&gt;&lt; 0,“&amp; c14&amp;”&lt;&gt;“” n/a“”)“ | = d13&amp;” &lt;&gt;“” n/a“”)“ | = e13&amp;” a“”)“ | = f13&amp;“*”&amp;“ and(”&amp; f14&amp;&lt;&gt;&gt; 0,“”&amp; f14&amp;&amp;&lt | ; “*”&amp;“ and(”&amp; g14&amp;“&lt;&gt;&gt; 0,”&amp; g14&amp;“&lt |
; +细胞3+单元4+先前的公式的先前公式,用于细胞5 | 公式2 | = c16&amp; amp; amp; d16&amp; amp;“+”+”&amp; e16&amp; amp;“+”+“ f16&amp; f16&amp; amp; | ||||
价值*重量/先前公式 | 3 | = C14&amp;“*”&amp; c13&amp;“/”/“&amp;”(“&amp; $ c17&c17&amp;“)” | = d14&amp;“*”*“*”&amp; d13&amp; d13&amp; amp; amp; (“&amp; $ c17&amp;“)” | = e14&amp;“*”&amp; e13&amp;“/”/“&amp;”(“&amp; amp; $ c17&amp;“)” | = f14&amp;“*” ;“(”(“&amp; $ c17&amp;“)” | = g14&amp;“*”&amp; g13&amp;“/”/“&amp;”(“&amp; $ c17&amp; amp;”)'if |
(or(value =“ n/a”,“”,“”,“”,“”,“”,值= 0),0,以前的公式) | 公式4 | =“ if(或(”&amp; c14&amp;“ =”“ n/a”,“,”&amp; c14&amp;“ = 0),0),0,&amp; amp; c18&amp; “)” | =“ if(或(”&amp; d14&amp;“ =”“ n/a”,“”,“”&amp; d14&amp;“ = 0),0,”,“”&amp; d18&amp;“)” | = ”&amp; e14&amp;“ =”“ n/a”,“”,“”&amp; e14&amp;“ = 0),0,“”&amp; e18&amp;“)” | =“ if(或(或(或(或”&(“”&(&amp; f14 n/a“”,“”,&amp; f14&amp;“ = 0),0,”,“”&amp; f18&amp;“)” | =“ if(or(或(”&(“&amp; g14&amp;” =“ n/a”“ n/a”,“”,“&amp; g14&amp;“ = 0),0,“”,&amp; g18&amp;“)” |
单元1 +单元格2 +先前公式的先前公式2 + cell 3 + cell 4 +先前的公式4 +先前的公式5个单元 | 格5 | = c19&amp ;“+”&amp; d19&amp;“+”&amp; e19&amp;“+”&amp; f19&amp;“+”+“ g19 |
Crazy Formulas都需要疯狂的编辑方式。
NICE DCV Web客户端在Web浏览器中运行时,需要在浏览器中执行NICE DCV SDK。它不能在nodejs中执行。
您想实现什么?
您可以将全日期存储为单独的密钥(称为日期),并使用预定义的数组为每个月的名称设置单独的函数。这是您要使用的代码:
const monthName = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"]; // Array representing each month
var chartItems = [
{
"date": "2022-06-01T00:00:00+02:00",
"month": null,
"total": 4
},
{
"date": "2022-08-01T00:00:00+02:00",
"month": null,
"total": 1
}
];
// Run through each item in the array
function setMonths(arr) {
arr.forEach(item => {
const date = new Date(item.date); // Convert date string to Date object
const monthIndex = date.getMonth(); // Get index of month from the Date
const month = monthName[monthIndex]; // Convert index into text representing the month
item.month = month; // Set the month key in the object to the new month
});
}
setMonths(chartItems); // Call function to set months in the array
作为替代方案,您还可以为阵列中的每个对象制作一个方法,但是每次要获得一个月时,您都需要运行此方法。这是为此的代码:
const monthName = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
var chartItems = [
{
"date": "2022-06-01T00:00:00+02:00",
"month": function() { return monthName[new Date(this.date).getMonth()]; },
"total": 4
},
{
"date": "2022-08-01T00:00:00+02:00",
"month": function() { return monthName[new Date(this.date).getMonth()]; },
"total": 1
}
];
您会这样得到:
chartItems[0].month(); // "[0]", meaning the first item in the array
这里的大多数答案是关于如何根据其先前的值更新状态的,但我不明白这与问题有关
USESTATE SET方法没有立即反映更改
反应18
USESTATE是异步的:
当触发某个代码,发生某个代码,发生的事件发生时,代码开始运行,当它finshes finshes时,React会检查是否有状态更新,以及它是否存在 usestate
挂钩的值已更新,这导致了一个新渲染,其中新值可用。
const [example,setExemple] = useState("")
//...
<button
onClick={() => {
const newValue = "new";
setExample(newValue);
console.log(example); // output "" and this is normal, because the component didn't rerenderd yet so the new value is not availabe yet
}}
>
Update state
</button>
假设我们有一个方案如果我们的状态取决于另一个状态,例如,我们要根据示例的新值
每次更新时进行API调用,然后将响应中的数据存储在另一个状态<代码> anotherexample 。
为了实现,我们有两种方法:
1。使用newValue
的值:
,
<button
onClick={async () => {
const newValue = "new";
const response = await axios.get(`http://127.0.0.1:5000/${newValue}`);
setExample(newValue);
setAnotherExample(response.data);
}}
>
test
</button>
因为您知道示例
将接收此值,因此可以直接基于它创建逻辑。
2。触发a useffect 每次运行 示例
在其依赖项数组中:
<button
onClick={() => {
const newValue = "new";
setExample(newValue);
}}
>
test
</button>
useEffect(() => {
async function test(){
const response = await axios.get(`http://127.0.0.1:5000/${example}`);
setAnotherExample(response.data);
}
test();
}, [example])
因此,当示例
使用事件函数更新时渲染一旦完成,useffect
将运行,因为示例的值
与上次渲染和由于它是一种新的不同渲染,因此在此处可用示例
USESTATE HONK的新值。
注意: 使用效果
挂钩在第一个安装座期间都会运行。
哪种方法更好?
虽然第一种方法将使所有工作都在一个渲染中(一种更好的方法)“ react组多个状态更新到单个重新渲染中以获得更好的性能”,第二种方法将做到这一点在两个渲染中,第一个是
示例
更新时,第二个是anotherexample
从内部更新 useffeft useeffect
编辑:您可以掩盖LAT,并长时间到真实位置。
import MapKit
import SwiftUI
struct ContentView: View {
let geocoder = CLGeocoder()
@State private var result = "result of lat & long"
@State private var address = ""
@State private var lat = 0.0
@State private var long = 0.0
@State private var country = "country name"
@State private var state = "state name"
@State private var zip = "zip code"
var body: some View {
VStack {
//Enter "Florida"
TextField("Enter Location", text: $address)
//Press button
Button {
geocoder.geocodeAddressString(address, completionHandler: {(placemarks, error) -> Void in
if((error) != nil){
print("Error", error ?? "")
}
if let placemark = placemarks?.first {
let coordinates:CLLocationCoordinate2D = placemark.location!.coordinate
print("Lat: \(coordinates.latitude) -- Long: \(coordinates.longitude)")
//added code
result = "Lat: \(coordinates.latitude) -- Long: \(coordinates.longitude)"
lat = coordinates.latitude
long = coordinates.longitude
}
})
} label: {
Text("Press For Location")
}
//result will show "Lat: 29.5449611 -- Long: -81.7627933"
Text("\(result)")
Spacer()
//Press this button after you pressed the location button
//it will convert the lat & long to real location
Button {
reverseLatLong(lat: lat, long: long)
} label: {
Text("Reverse to address")
}
Text("\(country)") //United States
Text("\(state)") //FL
Text("\(zip)") //32177
}
}
func reverseLatLong(lat:Double, long:Double){
let geoCoder = CLGeocoder()
let location = CLLocation(latitude: lat, longitude: long)
geoCoder.reverseGeocodeLocation(location, completionHandler: { (sub, e) -> Void in
var l: CLPlacemark!
l = sub?[0]
if let lcountry = l.country {
country = lcountry
}
if let lstate = l.administrativeArea {
state = lstate
}
if let lzip = l.postalCode {
zip = lzip
}
})
}
}
这是我的尝试。它将消息放在同一文件中的另一张纸上。最后的电子表格看起来像这样:
import os
import pandas as pd
old_data_filename = r"old_data.xlsx"
new_data_filename = r"new_data.xlsx"
new_spreadsheet_filename = r"updated_products.xlsx"
# Load spreadsheets into a dataframe and set their indexes to "Product number"
old_data_df = pd.read_excel(old_data_filename).set_index("Product number")
new_data_df = pd.read_excel(new_data_filename).set_index("Product number")
# Determine which products are new/missing, and store the corresponding
# messages in a list, which will be written to its own spreadsheet at the end
old_data_products = set(old_data_df.index)
new_data_products = set(new_data_df.index)
new_products = new_data_products - old_data_products
missing_products = old_data_products - new_data_products
messages = [f"Product ID {product} is missing in new data file" for product in missing_products]
messages.extend(f"Product ID {product} is newly added" for product in new_products)
messages = [f"Message {i}) {message}" for i, message in enumerate(messages, start=1)]
# Keep the original product names
new_data_df.update(old_data_df["Name"])
# Old price is the same as new price unless the product is in old_data_df, in which
# case it is old_data_df["Current price"]
new_data_df["Old price"] = new_data_df["New price"]
new_data_df["Old price"].update(old_data_df["Current price"])
# Rename the columns
new_data_df.reset_index(inplace=True)
new_data_df.rename(columns={"Product number": "Product ID",
"Name": "Name of product"}, inplace=True)
# Remove all other columns except the ones we want
new_data_df = new_data_df[["Product ID",
"Name of product",
"New price", "Old price"]]
# Write the new products and messages to separate sheets in the same file
with pd.ExcelWriter(new_spreadsheet_filename) as writer:
new_data_df.to_excel(writer, "Products", index=False)
pd.DataFrame({"Messages": messages}).to_excel(writer, "Messages", index=False)
# Launch the new spreadsheet
os.startfile(new_spreadsheet_filename)
编辑:与实际电子表格一起使用的代码:
import os
import pandas as pd
old_data_filename = r"old_data.xlsx"
new_data_filename = r"new_data.xlsx"
new_spreadsheet_filename = r"updated_products.xlsx"
# Load spreadsheets into a dataframe and set their indexes to "Product number"
old_data_df = pd.read_excel(old_data_filename).set_index("Product ID")
new_data_df = pd.read_excel(new_data_filename).set_index("Product ID")
# Remove duplicated indexes for both the dataframes, keeping only the first occurrence
old_data_df = old_data_df[~old_data_df.index.duplicated()]
new_data_df = new_data_df[~new_data_df.index.duplicated()]
# Determine which products are new/missing, and store the corresponding
# messages in a list, which will be written to its own spreadsheet at the end
old_data_products = set(old_data_df.index)
new_data_products = set(new_data_df.index)
new_products = new_data_products - old_data_products
missing_products = old_data_products - new_data_products
messages = [f"Product ID {product} is missing in new data file" for product in missing_products]
messages.extend(f"Product ID {product} is newly added" for product in new_products)
messages = [f"Message {i}) {message}" for i, message in enumerate(messages, start=1)]
# Keep the original product names
new_data_df.update(old_data_df["Name"])
# Old price is the same as new price unless the product is in old_data_df, in which
# case it is old_data_df["Current price"]
new_data_df["Old price"] = new_data_df["New price"]
new_data_df["Old price"].update(old_data_df["Current price"])
# Rename the "Name" column to "Name of product"
new_data_df.rename(columns={"Name": "Name of product"}, inplace=True)
# Remove all other columns except the ones we want
new_data_df.reset_index(inplace=True)
new_data_df = new_data_df[["Product ID",
"Name of product",
"New price", "Old price"]]
# Write the new products and messages to separate sheets in the same file
with pd.ExcelWriter(new_spreadsheet_filename) as writer:
new_data_df.to_excel(writer, "Products", index=False)
pd.DataFrame({"Messages": messages}).to_excel(writer, "Messages", index=False)
# Launch the new spreadsheet
os.startfile(new_spreadsheet_filename)
普通CSS是用于样式的,因此我会编写自定义CSS文件并在那里写悬停CS。
抱歉,我不知道您的方式是否有命令 - 找不到任何东西。
Normaly css is for style, so i would write custom css-file and write hover-css there.
Sorry, i do not know whether there is a command for your way - did not found anything.
动态设置悬停颜色