0

I have something like this in my console: How can I take out the [object Object] from my output?

I want the output printed without the [Object Object]. Probably using a ternary operation?

data:[object Object]
  text:Data is supplied by Government
  link:https://en.wikipedia.org/

This is my code:

const GetData = (obj, step) => {

    let padSpace = ""

    for (let j=0; j < step; j++) {
      padSpace += ''
    }

    for (let k in obj) {
      console.log(padSpace + k + ':' + obj[k])
      if (typeof(obj[k]) === "object") {
        if (Array.isArray(obj[k])) {
          obj[k].forEach(element => {
              if (typeof(element === "object")) {
                GetData(element, step + 1);
              } else {
                console.log(padSpace + element)
              }
            }
          );
        } else {
          GetData(obj[k], step + 1);
        }
      } else {}
    }

I want something like:

Tini
  • 169
  • 8
  • Seems like you don't want to console.log the element if the element is an object. You already have an if that checks, you could put the initial console.log inside the (currently empty) else, below. – James May 04 '22 at 17:13
  • Sure you could console.log padString and prop, but not entity[prop], when the item is an object (inside the if that checks). – James May 04 '22 at 17:28

2 Answers2

1

I am not an expert but I'll try to help here.

This data is coming from an external API, I suppose. Right? It seems to me that is just a matter of how the data is being sent back from the server. Maybe you just need to use JSON.stringfy to convert the object to string.

It would be nice to have access to the kind of data being sent from the server to manipulate it.

Hope it starts to help you in a way...

Cheers

Daniel Rocha
  • 41
  • 1
  • 4
  • This might be the simplest way. Check https://stackoverflow.com/a/7220510/535480 to implement the equivalent of padString. – James May 04 '22 at 17:30
1

The following test will always pass because typeof true and typeof false are both "boolean" which is truthy.

if (typeof(element === "object")) {

Try

if (typeof element === "object") {

I have no idea why you are talking about a ternary operation.


To avoid the [object Object] you can move the existing console.log and add another one as shown:

for (let prop in entity) {  
  if (typeof entity[prop] === "object") {
    console.log(padString + prop + ':');
    if (Array.isArray(entity[prop])) {
      entity[prop].forEach(element => {
        if (typeof element === "object") {
          formatData(element, level + 1);
        } else {
          console.log(padString + element)
        }
      });
    } else {
      formatData(entity[prop], level + 1);
    }
  } else {
    console.log(padString + prop + ':' + entity[prop])
  }
}
MikeM
  • 13,156
  • 2
  • 34
  • 47