我正在尝试编写一个过滤掉任何虚假值的快速函数。这似乎抓住了除了' null'。
之外的所有东西请帮忙!
def find_paths(self, start, end, weight_limit=10):
res = []
def dfs(start, end, path=[], weight=0):
path = path + [start]
if len(path) > 1:
weight += self.weights[(path[-2], start)]
if weight > weight_limit:
return []
if start == end:
res.append((path, weight))
return [path]
if start not in self.adjacent:
return []
paths = []
for node in self.adjacent[start]:
if node not in path:
paths.extend(dfs(node, end, path, weight))
return paths
dfs(start, end)
return res
答案 0 :(得分:2)
您无法检查NaN
。
在JavaScript中,NaN !== NaN
为true
。这就是您应该使用Number.isNaN检查值是否为NaN
的原因;这也是您的过滤器不适用于NaN
值的原因。 switch语句永远不会到达NaN
case的主体,因为内部相等检查总是会失败。
如果您只想过滤掉虚假值,您可以依靠他们的虚假而不是检查他们的确切值,这会更快:
[1, null, undefined, NaN, 0, "", true].filter(x => x); // [1, true]
答案 1 :(得分:0)
首先,您当前的代码会过滤掉null
值(但不会过滤掉NaN
)。 See what I'm talking about
在您的示例中,注意NaN !== NaN
非常重要,因为现在可以判断"不是数字"与另一个元素相同,而不是数字"。
从数组中省略任何虚假值的一种更简单的方法是迭代数组,并返回任何真正的值:
function noFalsy(arr){
var output = [];
arr.filter(function(element){
// If the element is not falsy, add it to our output array
if(element){
output.push(element);
}
});
return output;
}
console.log(noFalsy([1, true, 0, null, false, NaN])); // => [1, true]