1
var node = {
node: {
  name: "someone1",
  city: "somewhere1",
  state: "someplace1"
},
node : {
  name: "someone2",
  city: "somewhere2",
  state: "someplace2"
},
node : {
  name: "someone3",
  city: "somewhere3",
  state: "someplace3"
}
};


console.log(JSON.stringify(node.node));
//Output is {"name":"someone3","city":"somewhere3","state":"someplace3"}

but I need whole data like when I enter node.name..All names should display

3
  • is your var node = meant to be an array? Commented Mar 16, 2017 at 13:43
  • 5
    Properties with same names? Really? Commented Mar 16, 2017 at 13:43
  • 2
    Keys in JS objects must be unique. See this topic -> stackoverflow.com/questions/12561482/… Commented Mar 16, 2017 at 13:44

5 Answers 5

3

You should not keep object having properties with same name, keys within an object should be kept unique. You can have an array and loop over it

var node = [
     {
      name: "someone1",
      city: "somewhere1",
      state: "someplace1"
    },{
      name: "someone2",
      city: "somewhere2",
      state: "someplace2"
    }, {
      name: "someone3",
      city: "somewhere3",
      state: "someplace3"
    }
    ]
    
node.forEach(function(item){
   console.log(item.name);
})

Update: setting value to input considering you nested object as pointed out in comments.

You need recursion to find all the names in the nested object

$(function(){
var node = {
  "id": "429428",
  "name": "something",
  "state": {
    "filter": "98887"
  },
  "node": {
    "id": "49888",
    "name": "something2",
    "state": {
      "filter": "48765"
    },
    "node": {
      "id": "428866",
      "name": "something3",
      "state": {
         "filter": "998898"
      }
    }
  }
}
var arr = [];
function getValues(node, arr) {
    for (prop in node) {
        console.log(prop);
        if(prop == "name") {
            arr.push(node[prop]);
            
        }
        if(prop == "node") {
            getValues(node[prop], arr)
        }
    }
}

getValues(node, arr)




console.log(arr.join(" "));

document.getElementById('ip').value = arr.join(" ");
})
<input type="text" id="ip"/>

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

6 Comments

Can you please let me know how to append the result to a variable and add as a value to input.. I
By append do you mean to join the names and then set as a value
the data from backend comes like {"id":"429428","name":"something","state":{"filter":"98887"},"node":{"id":"49888","name":"something2","state":{"filter":"48765"},"node":{"id":"428866","name":"something3","state":{"filter":"998898"}}}}
Now I would like to access node.name from all and append to input like you did in previous snippet
Updated the answer, please check
|
1
var node = [
    {
        name: "someone1",
        city: "somewhere1",
        state: "someplace1"
    }, {
        name: "someone2",
        city: "somewhere2",
        state: "someplace2"
    }, {
        name: "someone3",
        city: "somewhere3",
        state: "someplace3"
    }
]

Comments

1

Declare your node var like this:

var node= { node: [{ name: "someone1", city: "somewhere1", state: "someplace1" }, { name: "someone2", city: "somewhere2", state: "someplace2" }, { name: "someone3", city: "somewhere3", state: "someplace3" }]};

Then you can print it with:

console.log(JSON.stringify(node));

It will output:

{"node":[{"name":"someone1","city":"somewhere1","state":"someplace1"},{"name":"someone2","city":"somewhere2","state":"someplace2"},{"name":"someone3","city":"somewhere3","state":"someplace3"}]}

Comments

0

You should change your data-structure.

Variant 1: array

var node = [
	{
	  name: "someone1",
	  city: "somewhere1",
	  state: "someplace1"
	},
	{
	  name: "someone2",
	  city: "somewhere2",
	  state: "someplace2"
	},
	{
	  name: "someone3",
	  city: "somewhere3",
	  state: "someplace3"
	}
];


console.log(JSON.stringify(node));

Variant 2: object

var node = {
	node1: {
	  name: "someone1",
	  city: "somewhere1",
	  state: "someplace1"
	},
	node2 : {
	  name: "someone2",
	  city: "somewhere2",
	  state: "someplace2"
	},
	node3 : {
	  name: "someone3",
	  city: "somewhere3",
	  state: "someplace3"
	}
};
console.log(JSON.stringify(node));

Comments

-1

Run snippet for answer and example!

var nodeObject = {
  innernode1: {
      name: "someone1",
      city: "somewhere1",
      state: "someplace1"
  },
  innernode2: {
      name: "someone2",
      city: "somewhere2",
      state: "someplace2"
  },
  innernode3: {
      name: "someone3",
      city: "somewhere3",
      state: "someplace3"
  }
};

var nodeArray = [{
      name: "Bob",
      city: "Milwaukee",
      state: "Narnia"
  },
  {
      name: "Jim",
      city: "Boston",
      state: "Mass."
  },
  {
      name: "Joe Dohn",
      city: "The International Space Station",
      state: "Space"
  }
];

for(var i=0;i<nodeArray.length;i++){
    document.getElementById("list").innerHTML+="<li>"+nodeArray[i].name+" lives in "+nodeArray[i].city+", "+nodeArray[i].state+"</li>";
}
<p>Look at how the inner <code>node</code> within the outer <code>node</code> object is defined 3 times in your code. The last one will overwrite all the previous ones.</p>
<p>Try giving each node a different name, or making an array.</p>
<p>Here's an example of outputting all values from the array version, which I would personally recommend:</p>
<ol id="list">
</ol>

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.