JavaScript:将条件条件作为值传递

JavaScript:将条件条件作为值传递,javascript,Javascript,我有一个使用jQuery查找元素的函数。然后我取那个元素,从中得到一个值,并将它赋给一个变量。但是,有时文档中不存在元素,函数将返回未定义的。这是预期的,如果返回的元素是未定义的,那么分配的变量也应该是未定义的。因为我多次使用这个函数来分配变量,所以我想让它整洁、一行一行。我认为使用条件可能是一个解决方案,但是,这样做会导致非常混乱的长行,并且需要调用函数两次: let html = $(response.body); let language = getRowElementFromText('

我有一个使用jQuery查找元素的函数。然后我取那个元素,从中得到一个值,并将它赋给一个变量。但是,有时文档中不存在元素,函数将返回未定义的
。这是预期的,如果返回的元素是
未定义的
,那么分配的变量也应该是
未定义的
。因为我多次使用这个函数来分配变量,所以我想让它整洁、一行一行。我认为使用条件可能是一个解决方案,但是,这样做会导致非常混乱的长行,并且需要调用函数两次:

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代码
中,这个
将是条件的值:

let html = $(response.body);
let language = getRowElementFromText('Language', html) ? this.find('a').text() : undefined;
let pages = getRowElementFromText('Page', html) ? parseInt(this.text()) : undefined;
若无法做到这一点,是否有其他更具可读性的方法可以在一行中实现这一点?

这是/将是ES2020中新增的(今天可通过transpilation获得)。代码如下所示(它只对
parseInt
cas有很大帮助):

如果找不到元素,
语言
将是
未定义的

如果您不能使用它(因为您的目标环境还没有它,而且您还没有进行传输),您可以传入一个函数,如果找到该元素,
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);
}
或者像这样(
回调
是可选的):



注意:在上面的例子中,我假设
getRowElementFromText
在某些情况下确实返回
undefined
(未找到),在其他情况下返回jQuery对象(已找到)。我标记它是因为如果它总是返回jQuery对象(可能是空的),jQuery对象永远不会出错(甚至不是空的)。

将以下函数添加到jQuery原型中。它接收回退字符串作为参数,当找不到元素时,返回回退字符串:

$.prototype.getText=函数(回退=未定义){
返回this.length>0?this.text():回退
}
console.log($(“#foo”).getText()
log($(“#bar”).getText(“如果元素不存在,则返回给定的回退字符串”))
log(`回退字符串默认值为:${$(“#baz”).getText()}`)


如果元素存在,则返回其内部文本
以进行检查,
getRowElementFromText
是否返回jQuery包装器?什么是
getRowElementFromText
返回的?它似乎返回一个jQuery对象,但jQuery对象永远不会出错,因此将始终使用条件运算符表达式的真实部分。它返回一个jQuery对象。我的pesudo代码应该包括:
getRowElementFromText('Language',html)。长度>0
function getRowElementFromText(text, html, callback) {
    const result = /*...existing logic...*/;
    return result === undefined ? undefined : callback(result);
}
function getRowElementFromText(text, html, callback) {
    const result = /*...existing logic...*/;
    return !callback || result === undefined ? result : callback(result);
}