Bun
Bun

Reputation: 3137

Find specific property then push to an array

I have to the following json file. My goal is to find all name properly and add its value to name array.

var data = {
  "Fruits": [{
    "name": "apple",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "orange",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "strawberry",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "banana",
    "added_date": "",
    "expired_date": ""
  }],
  "Meat": [{
    "name": "beef",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "chicken",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "fish",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "pork",
    "added_date": "",
    "expired_date": ""
  }],
  "Vegetable": [{
    "name": "cucumber",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "kale",
    "added_date": "",
    "expired_date": ""
  }],
  "Spice": [{
    "name": "cajun",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "garlic",
    "added_date": "",
    "expired_date": ""
  }]
};

I came up with something like this, but give me error on push function. Is there a better way to solve this problem?

var name = [];
for (var key in data) {
  for (var i = 0; i < data[key].length; i++) {
    console.log(data[key][i].name);
    name.push(data[key][i].name);
  }
}
console.log(name);

Upvotes: 0

Views: 52

Answers (1)

Arun P Johny
Arun P Johny

Reputation: 388316

The problem is the variable name name, since it is in the global scope you are trying to override the window.name property which takes only string values

var data = {
  "Fruits": [{
    "name": "apple",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "orange",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "strawberry",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "banana",
    "added_date": "",
    "expired_date": ""
  }],
  "Meat": [{
    "name": "beef",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "chicken",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "fish",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "pork",
    "added_date": "",
    "expired_date": ""
  }],
  "Vegetable": [{
    "name": "cucumber",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "kale",
    "added_date": "",
    "expired_date": ""
  }],
  "Spice": [{
    "name": "cajun",
    "added_date": "",
    "expired_date": ""
  }, {
    "name": "garlic",
    "added_date": "",
    "expired_date": ""
  }]
};

var name = [];
snippet.log('name value:' + name + ':' + typeof name + ':')

var names = [];
for (var key in data) {
  for (var i = 0; i < data[key].length; i++) {
    names.push(data[key][i].name);
  }
}
snippet.log(names);
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

Upvotes: 5

Related Questions