简体   繁体   中英

Find how many items in array are greater equal or less than given number Javascript

  let numbers = [2, 2, 6, 10];



const findAvarage = (numbers) => {
  let total = 0;
  let checkIntegers = numbers.every(i => !Number.isInteger(i))

  if (checkIntegers = true) {
    for(let i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }
  let avg = total / numbers.length;

   return avg
  } else {
    return "Only integers allowed"
  }
 
 const compareNumbers = (numbers) => {
   
 }

In this code I calculate the avarage of the given numbers in array and now I want to find how many numbers in array are greater that avarage number with second function

I tried to use find method but it did not work out,any solutions on this please?

You can use filter function to filter out the numbers that are larger than average.

const avg = findAvarage(numbers)
const count = numbers.filter(number => number > avg).length

u can use filter or reduce to solve it

 let numbers = [2, 2, 6, 10]; function countNumbers(number){ return numbers.filter(num=> num>=number).length; } function countNumbers2(number){ return numbers.reduce((count,item)=>count+(item>=number),0) } console.log(countNumbers(7)); console.log(countNumbers2(3))

 const compareNumbers = (numbers) => {
   const avg = findAvarage(numbers);
   let greater = 0;
   
   numbers.forEach((num) => { if (num > avg) greater++; });

   return greater;
 }

Javascript does not provide many extension methods that can be used for arrays, you have just some basics operations. Your code can be more cleaner if you turn this need into extensions for arrays that you can them every where without calling functions, you can do as follow:

Object.defineProperties(Array.prototype, {
    count: {
        value: function(value) {
            if(isNan(value)) return NaN;
            return this.filter(x => x>=value).length;
        }
    },
    average:{
        value:function(){
            let total = 0;
            if(!this.every(i => Number.isInteger(i))) 
               return NaN;
            for(let i = 0; i < numbers.length; i++) {
               total += numbers[i];
            }
            return total/this.length;
        }
    }
});

and you can use it like this for you example

var result = numbers.count(numbers.average())

this way ?

 const findAvarage=(a,b,c,d) => [a,b,c,d].reduceRight((t,n,i,a)=> { t += n if (!i) t /= a.length return t },0) , greaterOrEqualCount = (a,b,c,d) => { let avg = findAvarage(a,b,c,d) return [a,b,c,d].reduce((r,n)=>r+(n<avg?0:1),0) } console.log("count ",greaterOrEqualCount(2,2,6,10))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM