我有一些JSON对象数组中的数据。我正在尝试使用嵌套的forEach循环来提取数据。
数据的建模方式与belo相同。 dataModels中有多个dataModel和多个childNodes。
//this is what an example data looks like
dataModels[0].childNodes[0].appId
我正在尝试执行以下操作:
dataModels.forEach(function(entry){
entry.forEach(function(childrenEntry){
console.log(childrenEntry.appId);
})
})
但是上面不起作用,它给我一个错误,说“入口”不是一个功能。有没有更好的方法来实现我想要做的事情?
答案 0 :(得分:3)
您没有定位entry
对象内的数组,您需要遍历childNodes
属性以获取所需的数据。见下面的例子。
var dataModels = [];
dataModels[0] = {
childNodes: []
};
dataModels[0].childNodes[0] = {
appId: "foo"
};
dataModels.forEach(function(entry){
entry.childNodes.forEach(function(childrenEntry) { // was missing a )
console.log(childrenEntry.appId);
});
});
答案 1 :(得分:3)
嵌套foreach实际上是一种不好的做法。而不是你可以使用map()函数来获取数据。
假设一个对象数组是这样的&现在这里如何使用map代替多个foreach();
data = [{
dataModels: [{
childNodes: {
appId: 'foo'
}
}]
}];
data.forEach(function(obj) {
var res = obj.dataModels.map(function(o) {
return o.childNodes;
});
console.log(res[0]);
});
答案 2 :(得分:0)
在我看来,您的解决方案是正确的,但您错过了一个括号并且您没有引用childNodes属性:
data.forEach(function(entry){
entry.childNodes.forEach(function(childrenEntry){
console.log(childrenEntry.appId);
})
})