使用array.filter返回null或nothing而不是空数组

时间:2017-09-05 10:17:03

标签: javascript arrays

是否有 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的新实施外,我认为不能回答这个问题。
话虽如此,接受的答案是最接近我的想法。

2 个答案:

答案 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]));