Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

129
Visualizações
Value in between javascript

I have an arrays of object,

var date = [{age:5, name:"al"},
              {age:10, name:"ben"},
              {age:15, name:"mac"},
              {age:15, name:"sarah"},
              {age:20, name:"jack"},
              {age:24, name:"dan"}
             ];

and

var age = [15, 23];

For each age, how can I filter the array (named "data") that contain the exact match, and if there is no exact match, it will return the element that in between (closest lower value & closest upper value)?

For example for this case, for each age (15 and 23) it supposed to give me:

[[{age:15, name:"mac"},{age:15, name:"sarah"}],[{age:20, name:"jack"},{age:24, name:"dan"}]].

I try to use this:

function int(){
  var data = [{age:5, name:"al"},
              {age:10, name:"ben"},
              {age:15, name:"mac"},
              {age:15, name:"sarah"},
              {age:20, name:"jack"},
              {age:24, name:"dan"}
             ];
  var age = [15, 23];
  var filterData = age.map(n => data.filter(v => n==v.age));
}

But it only resolved the exact match value. However, I cant figured out how to get for in between values (closest lower & closest upper). In this case, for age 23, i supposed to get [{age:20, name:"jack"},{age:24, name:"dan"}].

Any help or tips would be appreciated. I have searched and cannot find a solution.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

const data = [
  {
    age: 5,
    name: "al"
  },
  {
    age: 10,
    name: "ben"
  },
  {
    age: 15,
    name: "mac"
  },
  {
    age: 15,
    name: "sarah"
  },
  {
    age: 20,
    name: "jack"
  },
  {
    age: 24,
    name: "dan"
  }
];

const age = [15, 23];

function lowerAndUpperBound(value) {
  let lower = { age: -1 };
  let upper = { age: 9999 };

  for (const obj of data) {
    if (obj.age === value && lower.age !== value) {
      lower = obj;
    }
    if (obj.age === value && upper.age !== value) {
      upper = obj;
    }
    if (obj.age > lower.age && obj.age < value && lower.age !== value) {
      lower = obj;
    }
    if (obj.age < upper.age && obj.age > value && upper.age !== value) {
      upper = obj;
    }
  }
  return [lower, upper];
}

const result = age.map((i) => lowerAndUpperBound(i));

console.log(result);
about 4 years ago · Juan Pablo Isaza Relatório

0

Just write an if statement to check if the length of 'filtered' is 0 or not
Also use let instead of Var

function int(d, a){
    a = a.sort();
    //Basically same thing u wrote
    let filtered = d.filter((e)=>age.includes(e.age));
    if (filtered.length == 0) {
        //Assumes the length of "a" is 2
        return d.filter((e)=> e.age >= a[0] && e.age <= a[1])
    } else {
        //If there is a result, return it
        return filtered
    }
}
let date1 = [{age:5, name:"al"},
              {age:10, name:"ben"},
              {age:15, name:"mac"},
              {age:15, name:"sarah"},
              {age:20, name:"jack"},
              {age:24, name:"dan"}
             ];
let date2 = [{age:5, name:"al"},
              {age:10, name:"ben"},
              {age:20, name:"jack"},
              {age:24, name:"dan"}
             ];

let age = [15, 23];
console.log(int(date1, age));
// Will result in this, has exact match:
/*
[
    {
        "age": 15,
        "name": "mac"
    },
    {
        "age": 15,
        "name": "sarah"
    }
]
*/
console.log(int(date2, age));
//Will result in this, has no exact match
/*
[
    {
        "age": 20,
        "name": "jack"
    }
]
*/
about 4 years ago · Juan Pablo Isaza Relatório

0

Try this, this is very easy to understand .

var date = [{age:5, name:"al"},

{age:10, name:"ben"},

{ age:15, name:"mac"},

{age:15, name:"sarah"},

{age:20, name:"jack"},

{age:24, name:"dan"} ];

var age = [15, 23];

const ans = date.filter(val=>age.includes(val.age)) ;

console.log(ans)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda