如何仅使用 javascript 遍历 json 数据中的数组
how to loop trough arrays in json data using only javscript
数据源(JSON):
{
"photographers": [{
"name": "Mimi Keel",
"id": 243,
"city": "London",
"country": "UK",
"tags": ["portrait", "events", "travel", "animals"],
"tagline": "Voir le beau dans le quotidien",
"price": 400,
"portrait": "MimiKeel.jpg"
},
{
"name": "Ellie-Rose Wilkens",
"id": 930,
"city": "Paris",
"country": "France",
"tags": ["sports", "architecture"],
"tagline": "Capturer des compositions complexes",
"price": 250,
"portrait": "EllieRoseWilkens.jpg"
}
],
我正在尝试遍历第一个 photographers
条目中的键 tags
中包含的数组,并在列表项中显示所有标签。
这是我目前得到的结果:
function fetchData() {
fetch("sample json file.json")
.then(response => response.json())
.then(data => {
console.log(data.photographers[0].tags[1])
// looping throw tags of a photographer
var output = "";
for (var i = 0; i <= data.photographers[0].tags.length; i++) {
for (keys in data.photographers[0].tags[i]) {
console.log(data.photographers[0].tags[i])
if (data.photographers[0].tags[i].hasOwnProperty(keys)) {
output += '<li>' +
'<a href="' + data.photographers[0].tags[i] +
'">' + data.photographers[0].tags[i] + '</a>' +
'</li>';
}
}
}
var update = document.getElementById('tags');
update.innerHTML = output;
})
}
fetchData();
我愿意接受任何对我的代码的建议或更正
你的循环可以变得非常简单。它有几个问题,例如您提到的那个,另一个是与多个摄影师打交道,而不仅仅是第一个(不确定这是否是您的实际用例):
您的代码更改:删除内部 for 循环,因为它会复制所有内容:
for (var i = 0; i < data.photographers[0].tags.length; i++) {
console.log(data.photographers[0].tags[i])
}
建议:
// same data given in the question
let data = { "photographers": [{ "name": "Mimi Keel","id": 243,"city": "London","country": "UK","tags": ["portrait", "events", "travel", "animals"],"tagline": "Voir le beau dans le quotidien","price": 400,"portrait": "MimiKeel.jpg" }, {"name": "Ellie-Rose Wilkens","id": 930,"city": "Paris","country": "France","tags": ["sports", "architecture"],"tagline": "Capturer des compositions complexes","price": 250,"portrait": "EllieRoseWilkens.jpg" }]};
// All photographers
for (let photographer of data.photographers) {
for (let tag of photographer.tags) {
console.log(tag);
// Here you get individual tag. Use it in your code like generating output.
}
}
// Just the first photographer
for (let tag of data.photographers[0].tags) {
console.log(tag);
// Here you get individual tag. Use it in your code like generating output.
}
数据源(JSON):
{
"photographers": [{
"name": "Mimi Keel",
"id": 243,
"city": "London",
"country": "UK",
"tags": ["portrait", "events", "travel", "animals"],
"tagline": "Voir le beau dans le quotidien",
"price": 400,
"portrait": "MimiKeel.jpg"
},
{
"name": "Ellie-Rose Wilkens",
"id": 930,
"city": "Paris",
"country": "France",
"tags": ["sports", "architecture"],
"tagline": "Capturer des compositions complexes",
"price": 250,
"portrait": "EllieRoseWilkens.jpg"
}
],
我正在尝试遍历第一个 photographers
条目中的键 tags
中包含的数组,并在列表项中显示所有标签。
这是我目前得到的结果:
function fetchData() {
fetch("sample json file.json")
.then(response => response.json())
.then(data => {
console.log(data.photographers[0].tags[1])
// looping throw tags of a photographer
var output = "";
for (var i = 0; i <= data.photographers[0].tags.length; i++) {
for (keys in data.photographers[0].tags[i]) {
console.log(data.photographers[0].tags[i])
if (data.photographers[0].tags[i].hasOwnProperty(keys)) {
output += '<li>' +
'<a href="' + data.photographers[0].tags[i] +
'">' + data.photographers[0].tags[i] + '</a>' +
'</li>';
}
}
}
var update = document.getElementById('tags');
update.innerHTML = output;
})
}
fetchData();
我愿意接受任何对我的代码的建议或更正
你的循环可以变得非常简单。它有几个问题,例如您提到的那个,另一个是与多个摄影师打交道,而不仅仅是第一个(不确定这是否是您的实际用例):
您的代码更改:删除内部 for 循环,因为它会复制所有内容:
for (var i = 0; i < data.photographers[0].tags.length; i++) {
console.log(data.photographers[0].tags[i])
}
建议:
// same data given in the question
let data = { "photographers": [{ "name": "Mimi Keel","id": 243,"city": "London","country": "UK","tags": ["portrait", "events", "travel", "animals"],"tagline": "Voir le beau dans le quotidien","price": 400,"portrait": "MimiKeel.jpg" }, {"name": "Ellie-Rose Wilkens","id": 930,"city": "Paris","country": "France","tags": ["sports", "architecture"],"tagline": "Capturer des compositions complexes","price": 250,"portrait": "EllieRoseWilkens.jpg" }]};
// All photographers
for (let photographer of data.photographers) {
for (let tag of photographer.tags) {
console.log(tag);
// Here you get individual tag. Use it in your code like generating output.
}
}
// Just the first photographer
for (let tag of data.photographers[0].tags) {
console.log(tag);
// Here you get individual tag. Use it in your code like generating output.
}