javascript - JavaScript:将条件条件作为值传递
问题描述
我有一个使用 jQuery 查找元素的函数。然后我获取该元素,从中获取一个值并将其分配给一个变量。但是,有时文档中不存在元素并且函数将返回undefined
。这是预期的,如果返回的元素是undefined
,那么被分配的变量也应该是undefined
. 因为我多次使用这个函数来分配变量,所以我想让它整洁并且在一行上。我认为使用条件可能是一种解决方案,但是,这样做会导致非常混乱的长行并且需要调用该函数两次:
let html = $(response.body);
let language = getRowElementFromText('Language', html) ? getRowElementFromText('Language', html).find('a').text() : undefined;
let pages = getRowElementFromText('Page', html) ? parseInt(getRowElementFromText('Page', html).text()) : undefined;
是否有可能解决这些问题并以某种方式传递条件的条件以用作值?例如,在这个 pesudo 代码this
中将是条件的值:
let html = $(response.body);
let language = getRowElementFromText('Language', html) ? this.find('a').text() : undefined;
let pages = getRowElementFromText('Page', html) ? parseInt(this.text()) : undefined;
如果这不可能,是否有另一种更具可读性的方式可以在一行上完成?
解决方案
它是/将与ES2020 中新增的可选链接运算符一起使用(今天可通过编译获得)。代码看起来像这样(它只对parseInt
cas 有很大帮助):
let language = getRowElementFromText('Language', html)?.find('a').text();
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
let pageText = getRowElementFromText('Page', html)?.text();
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^
let pages = pageText ? parseInt(pageText) : undefined;
language
如果undefined
没有找到该元素。
如果你不能使用它(因为你的目标环境还没有它并且你没有编译),你可以传入一个函数,getRowElementFromText
如果找到元素就会调用:
let html = $(response.body);
let language = getRowElementFromText('Language', html, el => el.find('a').text());
let pages = getRowElementFromText('Page', html, el => parseInt(el.text()));
getRowElementFromText
看起来像这样:
function getRowElementFromText(text, html, callback) {
const result = /*...existing logic...*/;
return result === undefined ? undefined : callback(result);
}
或者可能像这样(callback
可选):
function getRowElementFromText(text, html, callback) {
const result = /*...existing logic...*/;
return !callback || result === undefined ? result : callback(result);
}
注意:在上面我假设在某些情况下getRowElementFromText
确实返回(“未找到”),并在其他情况下返回一个 jQuery 对象(找到)。undefined
我标记它是因为如果它总是返回一个 jQuery 对象(可能是空的),那么 jQuery 对象永远不会是虚假的(甚至不是空的)。
推荐阅读
- mysql - java.sql.SQLException: IP 地址 [] 的客户端不允许连接到此 MySQL 服务器
- typescript - 布尔值与可选 true
- coldfusion - 如何在 CFWheels 上重新加载模型方法?
- java - 使用 jar 但不在库本身中时出错
- c++ - 如何使用默认值 0 或 -1 初始化 unordered_set?
- r - 如何使用动态名称计算 R 数据框中的多个新列
- database-design - CAP 定理:选择一致性和可用性?
- tensorflow - AbortedError:找不到会话 902faae618c6a822
- python - 如何使用 python argparse api 在组中收集命令行参数?
- c - IAR 链接器在初始化期间将代码从 FLASH 复制到 RAM