1

I have JS object like this

    {
        "100": {.. data },
        "200": {.. data },
        "500": {.. data },
        "1000": {.. data }
        /* so on */
    }

How to search key with any number like

  • if search number is between 0 to 99 then it will return false,
  • if search number is between 100 to 199 then it will return key 100 and its value
  • if 500 to 999 then return key 500 and its value
  • if 1000+ then key as 1000 and its value

here is my code

function find(num, obj) 
{
  let keys = Object.keys(obj);
  
  result = keys.concat(Number.MAX_SAFE_INTEGER).filter(key => {
     return num <= key;
  }).shift();

  if(result === Number.MAX_SAFE_INTEGER) {
     result = keys.pop();
  }
  return result;
}


console.log( find(125, data) )

it's returning 200 instead of 100

9
  • Could you post what have you tried? Commented Apr 14, 2022 at 8:01
  • 1
    @KaysKadhi updated post with code Commented Apr 14, 2022 at 8:16
  • Shouldn't the condition be inverted? return key<= number ? Commented Apr 14, 2022 at 8:21
  • return num <= key; will return where num is less than or equal to key...ie the next key, not the previous one. Commented Apr 14, 2022 at 8:21
  • what if you find 300? will the output will be 200 right? since that's the nearest Commented Apr 14, 2022 at 8:37

1 Answer 1

2

A simple approach here is to sort the keys in descending order, then find the first key that target larger than it.

function findNearestMinObj(obj, target) {
  const sortedKeys = Object.keys(obj).map(d => Number(d)).sort((a, b) => b - a)
  const key = sortedKeys.find(k => target >= k)
  if (key === undefined) return false
  return {
    key,
    value: obj[key]
  }
}

const data = {
  100: "one hundred",
  200: "two hundred",
  300: "three hundred",
  400: "four hundred",
  500: "five hundred",
  1000: "one thousand",
}

console.log(`123: ${JSON.stringify(findNearestMinObj(data, 123))}`)
console.log(`456: ${JSON.stringify(findNearestMinObj(data, 456))}`)
console.log(`1234: ${JSON.stringify(findNearestMinObj(data, 1234))}`)
console.log(`99: ${JSON.stringify(findNearestMinObj(data, 99))}`)
console.log(`0: ${JSON.stringify(findNearestMinObj(data, 0))}`)

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

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.