问题:鉴于对象(模型)和路径列表(例如:“organization.LongName”),我希望找到与此路径匹配的所有值并将它们推送到数组。
这是解决此问题的一个问题:Plnkr
图示了一个示例对象和我感兴趣的值
*编辑:看看这些答案,我的解释似乎不清楚。这里的重点是
答案 0 :(得分:1)
好的,我的回答有点过时,并且还引入了库依赖项,但如果你想要一些更灵活的东西而不是直接循环和代码,你可能要考虑JSONPath哪个允许您像使用XPath一样与JavaScript对象/数组进行交互,只需要一点different syntax。
鉴于plnkr示例中的模型,以下内容将为您提供所需的列表:
jsonPath(model,'$..organization..LongName');
// $ = the root element
// .. = descend until whatever comes next (either organization or LongName)
// organization|LongName = the object you're looking for
结果摘录如下:
["Group A", "Group B", "Group A", "Group B", "Group A", "Group B", "Group A", "Group B", "Group C", "Group D"...]
答案 1 :(得分:0)
使用现代浏览器,您可以使用Array.map()功能。
var obj = {
id: 0,
organization:[
{id:0, LongName:"group A"},
{id:1, LongName:"group B"}
],
number: 123,
LongName: "John World"
};
var groupLabels = obj.organization.map(function(e){
return e.LongName;
});
console.log(groupLabels);
如果您遇到了坚持使用过时浏览器的地方,可以使用上述MDN链接中兼容性部分提供的代码来重新调整map()
函数。
答案 2 :(得分:0)
考虑这个解决方案
function getOccurences(jsonObject, path) {
path = '$..' + path.replace('.','..');
return jsonPath(jsonObject, path);
}
你可以这样称呼它:
getOccurences(someJsonData, 'organization.LongName')
答案 3 :(得分:0)
你可以试试这个完美的作品。
function getValuesFromArray(obj, property)
{
// obj = your object in which you want to find your property
// property == your property which you want to find
for(var index=0; index<obj.length; index++)
{
if(obj[index] instanceof Object)
getValuesFromObject(obj[index], property);
else if(obj[value] instanceof Object)
getValuesFromObject(obj[value], property);
}
}
function getValuesFromObject(obj, property)
{
// obj = your object in which you want to find your property
// property == your property which you want to find
for(value in obj)
{
if(value == property)
myArray.push(obj[property]);
else if(obj[value] instanceof Array)
getValuesFromArray(obj[value], property);
else if(obj[value] instanceof Object)
getValuesFromObject(obj[value], property);
}
}