是否有 vanilla js 返回null
(或没有)而不是空数组[]
的方式
来自Array.prototype.filter
时没有找到任何元素?
一些上下文:
let arr = [1,2,3,1,1]
let itemsFound = arr.filter(e=> e===6)
if(itemsFound){ // always true, []===true
// do something
}
if
将始终评估为true
,因为filter
会返回一个空数组[]
。
javascript中的空数组为“ true ”。我当然能做到,
if(itemsFound.length > 0){
// do something
}
但我认为,if(itemsFound){}
更整洁
答案不需要额外的js库。
附加背景
来自OO背景,我发现它的对象和功能非常时髦
可以像布尔一样对待。但是在习惯之后觉得它很直观
有些时候我会忘记Array.filter
在没有找到任何元素时返回一个空数组[]
。并[] === true
。这会导致不必要的错误。
与现在收到的答案和反馈一样,除了Array.filter
的新实施外,我认为不能回答这个问题。
话虽如此,接受的答案是最接近我的想法。
答案 0 :(得分:1)
如果你只是想检查它是否存在,你可以做这样的事情
let arr = [1,2,3,1,1]
let itemsFound = arr.filter(e=> e===6).length
console.log(itemsFound);
if(itemsFound){ // always true
// do something
}

或类似的东西
let arr = [1,2,3,1,1]
let itemsFound = arr.filter(e=> e===6)
itemsFound = (itemsFound.length > 0 ? itemsFound : false);
console.log(itemsFound)
if(itemsFound){ // always true
// do something
}

或类似的东西
Array.prototype.isEmpty = function(){
return this.length == 0;
}
let arr = [1,2,3,1,1];
arr.isEmpty();
let itemsFound = arr.filter(e=> e===6)
if(itemsFound.isEmpty()){ // always true
// do something
console.log('OK');
}

答案 1 :(得分:0)
您可以使用数组的length
属性,并将值作为条件的truthy / falsy值。
function getValues(array) {
const result = array.filter(e => e === 6);
return result.length ? result : null;
}
console.log(getValues([1, 2, 3, 1, 1]));