1

I'm new to this community and just started programming I couldn't find anything about this topic can anyone please solve this. I need to filter names who's each points in array above 75. i have tried this and unable iterate over an array.

const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}]

const arrayOfSelecetedCandidates=[]
  for(let object of candidatesList){
      if (candidatesList.every(candidatesList.points>75)){
         arrayOfSelecetedCandidates.push(candidatesList.name)
      }
  }
  console.log(arrayOfSelecetedCandidates);

2
  • 2
    You don't need to iterate manually with a for loop, just use const filtered = candidatesList.filter( c => c.points.every( p => p > 75 ) ); Commented Feb 13, 2022 at 4:33
  • 1
    Your candidates's array's objects don't have identical keys. Keys in JS are case-sensitive, but Points and points are different. You need to fix that. Commented Feb 13, 2022 at 4:34

3 Answers 3

2

Maybe you want this?

const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}]

const arrayOfSelecetedCandidates=[]
  for(let object of candidatesList){
      if (object.points.every(i=>i>75))
         arrayOfSelecetedCandidates.push(object.name)
  }
  console.log(arrayOfSelecetedCandidates);

But as @Dai pointed out filter is always better if you want to test an array and return item that pass the test:

const candidatesList = [{'name':'Blake Hodges', 'points':[76,98,88,84]},{'name':'James Anderson', 'points':[0,98,12,13]}]

const arrayOfSelecetedCandidates=candidatesList.filter(i=>i.points.every(y=>y>75))
console.log(arrayOfSelecetedCandidates)

Sign up to request clarification or add additional context in comments.

2 Comments

I'm curious why there's almost no whitespace in your code - don't you find it hard to read? How do you eyeball-match nested parentheses?
@Dai, is it really hard for people to read it??? Never realize that before. I sometimes feel that it is pretty cool to shorten the code as much as possible. (I could fix it if needed) Do you mind kindly share some your experiences/suggestions? (Just a beginner) =)
0

You can achieve this by using Array.filter() method along with Array.every() to test whether all elements in the array pass the test implemented by the provided function. It returns a Boolean value.

Working Demo :

const candidatesList = [{
    'name': 'Blake Hodges',
    'points': [76, 98, 88, 84]
}, {
    'name': 'James Anderson',
    'points': [0, 98, 12, 13]
}];

let res = candidatesList.filter((obj) => {
    return obj.points.every((item) => item > 75)
});

console.log(res);

2 Comments

How is it different between the above answer
@Shawn Thank you! Sorry, I missed that answer while writing my own answer.
0

"I need to filter names who's each points in array above 75"

Looking at the content of OP, I believe that's incorrect. It would make more sense if the desired output would be only the objects (aka candidates) that have an average of points at or above 75 not a total of 75 (although not explained very well). So the plan of attack would be:

  • Get each of the candidates with a for...of loop:

    for (const candidate of candidates) {...
    
  • Get each of the candidate's points (candidate.points) and get their sums using .reduce() (note: the return goes to a new property called .total). Then take that total and divide by the number of grades found in points array (it's candidate.points.length = 4):

    candidate.total = candidate.points.reduce((sum, cur) => sum + cur, 0);
    candidate.gpa = Math.floor(candidate.total / candidate.points.length);
    
  • Once candidate.gpa is established, .filter() will determine if it is equal to or greater than 75.

    return candidates.filter(candidate => candidate.gpa >= 75);
    

const candidates = [{
  'name': 'Blake Hodges',
  'points': [76, 98, 88, 84]
}, {
  'name': 'James Anderson',
  'points': [0, 98, 12, 13]
}, {
  'name': 'Zer0 0ne',
  'points': [100, 88, 91, 84]
}, {
  'name': 'Ronald McDonald',
  'points': [72, 51, 8, 89]
}];

const selected = candidates => {
  for (const candidate of candidates) {
    candidate.total = candidate.points.reduce((sum, cur) => sum + cur, 0);
    candidate.gpa = Math.floor(candidate.total / candidate.points.length);
  }
  return candidates.filter(candidate => candidate.gpa >= 75);
};

console.log(selected(candidates));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.