Charan
Charan

Reputation: 33

Object issue in javascript/jquery

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

Upvotes: 1

Views: 83

Answers (5)

Shubham Khatri
Shubham Khatri

Reputation: 281726

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"/>

Upvotes: 3

Feathercrown
Feathercrown

Reputation: 2591

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>

Upvotes: -1

br3t
br3t

Reputation: 1658

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));

Upvotes: 0

Željko Krnjić
Željko Krnjić

Reputation: 2366

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"}]}

Upvotes: 1

mast3rd3mon
mast3rd3mon

Reputation: 8825

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

Upvotes: 1

Related Questions