 Welcome to challenge 12! Use this thread for any and all questions relating to challenge 12.

3 Likes 3 Likes

Again, `Array#filter` allows us to write a nice, compact solution:

``````const checkAir = (samples, threshold) => samples.filter(i => i > "d").length / samples.length < threshold ? "Clean" : "Polluted"
``````
3 Likes
``````const checkAir = function (samples, threshold) {
return (samples.filter(sample => sample == 'dirty').length / samples.length) > threshold ? 'Polluted' : 'Clean';
}``````
1 Like

Exact same solution hehe:

``````const checkAir = (samples, threshold)=>{
if ((samples.filter(sample=>sample=='dirty').length/samples.length)<threshold){
return 'Clean'
}else return 'Polluted'
}
``````
2 Likes
``````const checkAir = function (samples, threshold) {
// Code here!

let countSample = 0;

for(var sample in samples){
if(sample === 'dirty')
countSample ++;
var pollution = countSample / samples.length;

if (pollution >= threshold){
return "Polluted";
}
else if (pollution <=threshold ){

return 'Clean';
}

}

};
``````

I didn’t pass a test:
Failed: If there are too many dirty samples, then the function should return "Polluted"

Reason: Your code ran but did not produce the correct result.

Hint: Check to see that the ratio of dirty samples to total samples is within the threshold.

Failing Test Code:

``````      const samples = ['clean', 'clean', 'dirty', 'clean', 'dirty', 'clean', 'clean', 'dirty', 'clean', 'dirty']
const threshold = 0.3

const result = checkAir(samples, threshold)

assert.equal(result, 'Polluted')

``````

Expected: Polluted

Actual: Clean

1 Like

you didn’t close your for loop after incrementing countSample. Also if pollution == threshold what happens? the else if should be less than instead of less than or equal to I think (:

I will show what I think it is wrong.

const checkAir = function (samples, threshold) {
// Code here!

let countSample = 0;

for(var sample in samples){
if(sample === ‘dirty’)
countSample ++;
// you need to do this after the for loop finish
var pollution = countSample / samples.length;

``````if (pollution >= threshold){
return "Polluted";
}
else if (pollution <=threshold ){

return 'Clean';
}
``````

}

};

Fixed:
const checkAir = function (samples, threshold) {
// Code here!

let countSample = 0;

for(var sample in samples){
if(sample === ‘dirty’)
countSample ++;
}
var pollution = countSample / samples.length;

``````if (pollution >= threshold){
return "Polluted";
}
else if (pollution <=threshold ){
return 'Clean';
}
``````

};

Great! kindly explain this line
`samples.filter(i => > 'd')`

1 Like

your function is not returning the right result… and i notice you’re trying to return from your for loop

Check your code correctly, indent it so you will be understand what you’ve written and no where error are

We use `Array#filter` to pick out the elements in `samples` that satisfy the given boolean test: for every element (represented by the variable `i`), check if it is greater than `"d"`.

By lexicological order, `"dirty" > "d"` and `"clean" < "d"`, so we use this line with the `.length` property to count the number of occurrences of `"dirty"` in `samples`.

const checkAir = function (samples, threshold) {

dirty = 0;
for (var sample in samples) {
if (sample == “dirty”) {
dirty = count++;}
let dirtnew = dirty / samples.length;
if (dirtnew > threshold) {
return ‘Polluted’;}
return ‘Clean’;
}
// Code here!
};

Thanks so much but what “d”? is it the first letter of dirty?

``````const checkAir = (samples, threshold) =>
samples.filter(sample => sample === "dirty").length / samples.length <
threshold
? "Clean"
: "Polluted";``````

what’s the count++ doing? it should be

``````if(sample == 'dirty){
return dirty++
}``````

`"d"` is just a string with a single letter in it. I just use that because, alphabetically, `"clean" < "d"` and `"d" < "dirty"`.

1 Like