Home > OS >  How do I get only the value of an object?
How do I get only the value of an object?

Time:12-05

I use TypeScript. I want to get only the value of an object, but this error occurs: TypeError: Cannot read properties of undefined (reading 'cd1')”.

callList = {
  cd1: "00001",
  nm1: "17"
}

// cd = '17'
const getFindbyNm(cd) => {
  const idx = callList.find(e => e.nm1 == cd)

  console.log(idx['cd1']); // ← Error occuered.
}

What am I doing wrong?

CodePudding user response:

find operates on Arrays, you're applying it to an Object

CodePudding user response:

Considering callList is an Array

const callList =
  [{
    cd1: "00001",
    nm1: "17"
  }]

Array.prototype.find returns an array item or undefined, as an item may not be found within the given array. This is why idx may be undefined, hence cd1 may not exist on undefined

To fix it you can either check if idx isn't undefined

  if(idx){ 
    console.log(idx['cd1']);
  }

or use the optional chaining operator ?.

console.log(idx?.['cd1'])

TS Playground

CodePudding user response:

Your code isn't properly structured, it's not really valid JS even.

With some code cleaning, it works, but as some have stated, you need to use an Array for .find() to work.

const callList = {
  cd1: "00001",
  nm1: "17"
};

const cd = '17';
const getFindbyNm = (param1, param2) => {
  return param1.find(e => e.nm1 == param2);
};

console.log(getFindbyNm([callList], cd));
console.log(getFindbyNm([callList], cd).cd1);

CodePudding user response:

you can use Object.entries instead of find since find is function in array not in object. Object.entries has the attributes of both the key and the value

const callList = {
  cd1: "00001",
  nm1: "17",
};

const getFindByNm = (cd) => {
  let returnval;
  Object.entries(callList).forEach(([key, value]) => {
    if (key == 'nm1' && value == cd) {
      returnval = value;
    }
  });
  return returnval;
};

let val = getFindByNm("17");
console.log(val);

CodePudding user response:

callList is an object and not an array.

The function .find() works on arrays and therefore when you try to do callList.find() you get undefined as a response.

  • Related