我使用javascript解析RSS新闻.. 返回的对象(来自Yahoo YQL)在 news 对象中包含新闻。
通常,它在这个子对象中:
news.results.item
所以我会正常使用:
进行迭代news.results.item.forEach
现在,当我加载多个来源时它会变得很有趣..它可以返回像
这样的东西news.results.item (array[10])
news.results.entry (array[10])
news.results.banana (array[10])
我的问题是,当我不知道将要返回的命名时,如何在这些条目中进行迭代..是否有一种简单的方法将它们全部合并? (使用jQuery很好)
答案 0 :(得分:2)
您可以遍历news.results
上的所有数组属性:
var news = {
results: {
item: ["a", "b", "c"],
entry: ["d", "e", "f"],
banana: ["g", "h", "i"]
}
};
Object.keys(news.results).forEach(function(key) {
var value = news.results[key];
if (Array.isArray(value)) {
value.forEach(function(entry) {
console.log(entry);
});
}
});
如果您正在寻找特定内容并希望在找到时停止,则可以使用some
代替forEach
或执行嵌套find
(您需要某些浏览器的find
polyfill仍然存在。)
但是如果你希望在搜索之前将它们组合起来,那就相当容易了:
var news = {
results: {
item: ["a", "b", "c"],
entry: ["d", "e", "f"],
banana: ["g", "h", "i"]
}
};
var all = [];
Object.keys(news.results).forEach(function(key) {
var value = news.results[key];
if (Array.isArray(value)) {
all.push.apply(all, value);
}
});
all.forEach(function(entry) {
console.log(entry);
});
(有些人会使用reduce
。我认为它会掩盖而不是帮助读取这样的情况,其中累积值永远不会真正改变。)
答案 1 :(得分:0)
您可以使用Object.keys()
,for..of
循环
let news = {
result: {
item: [1,2,3],
entry: [4,5,6],
banana: [7,8,9]
}
}
for (let key of Object.keys(news.result)) {
console.log(`${key}:`);
for (let entries of news.result[key]) {
console.log(entries)
}
}
答案 2 :(得分:0)
T.J.指出的更新答案。克劳德
var news = {
results: {
item: ["a", "b", "c"],
entry: ["d", "e", "f"],
banana: ["g", "h", "i"]
}
};
for (var key in news.results) {
console.log(key + " " + news.results[key])
}