所以我试图告诉绵羊是否存在(真),以及是否是(假)将绵羊从阵列中弹出。
我是CodeWars的新手,并且说实话。.最近我还没有真正使用for循环。
问题: 考虑一组绵羊/绵羊名单,其中可能缺少一些绵羊。我们需要一个函数来计算数组中存在的绵羊的数量(真意味着存在)。
我的代码:
function countSheeps(arrayOfSheep) {
for (i = 0; i < arrayOfSheep.length; i++ ) {
console.log(arrayOfSheep[i])
sheep = 0
if (arrayOfSheep === true) {
return sheep++
} else {
arrayOfSheep.pop()
}
}
console.log(sheep)
}
测试:
var array1 = [true, true, true, false,
true, true, true, true ,
true, false, true, false,
true, false, false, true ,
true, true, true, true ,
false, false, true, true ];
Test.expect(countSheeps(array1) == 17, "There are 17 sheeps in total")
答案 0 :(得分:1)
您可以在Array上使用filter
方法。
var array1 = [true, true, true, false,
true, true, true, true ,
true, false, true, false,
true, false, false, true ,
true, true, true, true ,
false, false, true, true ];
getCount = (data) => data.filter(d => d)
console.log(getCount(array1).length);
答案 1 :(得分:1)
似乎需要很多工作来解决此问题,让我们看一下问题:
function countSheeps(arrayOfSheep) {
for (i = 0; i < arrayOfSheep.length; i++ ) {
console.log(arrayOfSheep[i])
sheep = 0
if (arrayOfSheep === true) {
return sheep++
} else {
arrayOfSheep.pop()
}
}
console.log(sheep)
}
if (arrayOfSheep === true) {
arrayOfSheep
是一个数组。看来您正在遍历数组,并且想要使用i
作为索引,所以应该是arrayOfSheep[i]
。
return sheep++
这将使sheep
的值sheep
增至1,并立即返回原始值0,从而跳过数组的其余部分。您的函数在第一次找到真实值时将返回0。
arrayOfSheep.pop()
这将从数组中删除最后一个元素。在检查之前肯定不想做的事情...
sheep = 0
似乎您想让绵羊将“ true”值的计数存储在数组中。每次通过数组将其重置为0时,都意味着您只会计算最终的“ true”值。
console.log(sheep)
}
这里没有return语句。如果将其移到数组的末尾,则函数将默认返回undefined
。我在代码战上运行测试,我想您会看到0
或undefined
的结果。
靠近您的代码并使之工作将是这样的:
function countSheeps(arrayOfSheep) {
let sheep = 0; // set value once before counting
for (let i = 0; i < arrayOfSheep.length; i++ ) {
if (arrayOfSheep === true) {
sheep++; // increment value of sheep variable
}
}
return sheep; // return the cound in the sheep variable as your function return value
}
不过,更新的javascript中有更快的方法。您可以filter 取真值并返回结果的长度:
function countSheep(arrayOfSheep) {
// trueValues will only havet he true values from arrayOfSheep
let trueValues = arrayOfSheep.filter(sheep => sheep === true);
return trueValues.length;
}
对于reduce来说,另一种方法似乎很完美,它可以对数组的每个元素进行操作:
function countSheep(arrayOfSheep) {
return arrayOfSheep.reduce((acc, sheep) => sheep ? acc + 1 : acc, 0);
}
这从0值开始,并为数组中的每个元素调用函数。如果值为true,则返回acc + 1
,否则返回acc
,且不做任何更改。因此,循环acc
的第一次设置为0,而sheep
将是数组中的第一个值。如果为true,则它将返回1,否则将返回0。下一次通过数组acc将是该返回值(0或1),而绵羊将是数组中的下一个元素。
答案 2 :(得分:0)
如下所示将完成工作。
function countSheep(input){
let sheep = 0;
for(i in input){
if(input[i]){
sheep++;
}
}
return sheep;
}
答案 3 :(得分:0)
我可能会误解您的问题,但是如果您要计算正布尔值的数量,请看以下示例。
const array1 = [true, true, true, false,
true, true, true, true ,
true, false, true, false,
true, false, false, true ,
true, true, true, true ,
false, false, true, true ]
console.log(array1.filter(entry => entry).length)