我试图编写一个函数sortBool(arr)
来获取一个数组,并返回一个对象,该对象包含找到的每种虚假值的计数。
例如:
sortBool([1, 0, 10, 2-2, Math.sqrt(-1)]); // should return {0: 2, NaN: 1}
至此:
const sortBool = arr => {
index = 0;
let falsyTypes = {};
while (index < arr.length) {
if(eval(arr[index])) {
index++;
}else {
//some code to determine what type of falsy value each element is and then add it to the object
}
}
return falsyTypes;
答案 0 :(得分:1)
您可以检查该值,然后以该值作为键进行计数。
function sortBool(array) {
return array.reduce((r, v) => {
if (!v) {
r[v] = (r[v] || 0) + 1;
}
return r;
}, {});
}
console.log(sortBool([1, 0, 10, 2 - 2, Math.sqrt(-1)]));
答案 1 :(得分:0)
@Nina Scholz的回答是正确的,并且是从功能上解决问题的好方法。从长远来看,学习JavaScript是必经之路。
以防万一一次需要太多新概念,我提供的解决方案更符合您实现的功能:
// you don't need lambda expressions, just a plain old function
function sortBool(arr) {
var falsyTypes = {};
// you can use a for for a slightly more compact syntax
for(var index = 0; index < arr.length; index++) {
var val = arr[index];
// you don't need to eval. So please don't
if (!val) {
falsyTypes[val] = (falsyTypes[val] || 0) + 1;
}
}
return falsyTypes;
}
如您所见,该方法比使用reduce的方法稍长,但在功能上等效。真的,完全一样。