有没有办法缩短这段代码?
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>TITLE</title>
<link rel="stylesheet" type="text/css" href="css/styles.css">
</head>
<body>
<?php
set_time_limit (0);
$row1= array();
$row =array();
$rowFinal = array();
$testcsv = fopen('file1.csv', 'a+');
$fichierFinal = fopen('totale.csv', 'w');
while($row=fgetcsv($testcsv, 99999,';')){
$ID_product = intval($row[0]);
$testcsv2 = fopen('file2.csv', 'a+');
while($row1=fgetcsv($testcsv2, 99999,';')){
$ID_combination = intval($row1[0]);
if($ID_product == $ID_combination ){
$fprice = $ID_product + $ID_combination;
//echo $fprice;
$rowFinal[]= $fprice;
echo $fprice . " ";
}
}
fclose($testcsv2);
}
fputcsv($fichierFinal, $rowFinal, ";");
?>
</body>
</html>
我的代码中经常包含很多这样的内容,并且愿意做类似的事情:
const result = getResult();
if (!result) {
return;
}
// Work with result
编辑: 我只想保留可转换输入。
const result = getResult() || return;
// Work with result
我知道我可以给转换器打电话两次。但我想避免这种情况:
const parseInput = (input: string): void => {
const convertedInput = convert(input);
if (!convertedInput) {
return;
}
persist(convertedInput);
}
答案 0 :(得分:1)
您可以做到
const result = "default value" || getResult();
如果getResult为null或未定义,那么您将获得result
作为“默认值”。如果那是您想要的
function getResult() {
return null;
}
const result = "okay" || getResult();
console.log(result)
const result = "okay" || getResult();
console.log(result)
基本上,语法是
null || undefined || null || 0 || "okay" || "defined" // "okay"
从左到右,选择最相关的值
答案 1 :(得分:1)
您的代码效果很好,但是,如果您想尝试一下功能样式,则可以将值包装到“ monad”中,仅在值不为零时才调用附加函数。 。这是一个玩具实现:
function maybe(x) {
return {
value: x,
apply(fn) {
if (this.value)
this.value = fn(this.value)
return this;
}
}
}
使用此maybe
,您的示例如下所示:
const parseInput = input => maybe(convert(input)).apply(persist)
有关更严肃的方法,请参见Oliver's answer。
答案 2 :(得分:0)
我真的不知道这个答案是否会给您带来令您满意的东西,但在我看来,这可能为解决未知结果提供了一种可能的解决方案。
Maybe
是具有这种内置检查的结构。如果.map()
中没有值,则下面的Maybe
将不会被调用,因此使用它的代码不需要检查是否存在值。
这确实意味着您必须更改处理这些值的方式,并且,除非您要编写自己的方法,否则这意味着使用库。因此,这并不是一个理想的解决方案,但我希望它至少可以提供一个选择。
const { None, Some } = Monet;
const getResult = () => Math.random() > 0.5
? None()
: Some(1);
const test = getResult()
.map(x => x + 2);
console.dir(test.val);
<script src="https://cdn.jsdelivr.net/npm/monet@0.9.0/dist/monet.min.js"></script>