Javascript 如何在属性深度为n的对象列表中查找给定属性的所有出现?
问题:给定对象列表(模型)和路径(例如:“organization.LongName”),我希望找到与此路径匹配的所有值,并将它们推送到数组中 这是一个带有此问题的plnkr: 以及一个显示示例对象和我感兴趣的值的插图 *编辑:看看这些答案,我的解释似乎不清楚。这里的重点是Javascript 如何在属性深度为n的对象列表中查找给定属性的所有出现?,javascript,arrays,Javascript,Arrays,问题:给定对象列表(模型)和路径(例如:“organization.LongName”),我希望找到与此路径匹配的所有值,并将它们推送到数组中 这是一个带有此问题的plnkr: 以及一个显示示例对象和我感兴趣的值的插图 *编辑:看看这些答案,我的解释似乎不清楚。这里的重点是 路径是一个变量,并作为字符串传递。比如:“x.y.z…n” 我不知道它的深度提前,因此,我需要能够找到的财产无论深度的财产 使用现代浏览器,您可以使用该功能 var obj = { id: 0, organizat
使用现代浏览器,您可以使用该功能
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()
函数。好的,我的答案有点离谱,还引入了库依赖性,但是,如果你想要更灵活的东西,而不是直通的循环和代码,你可能想考虑允许你像JXPath一样与JavaScript对象/数组交互,只有一点。
鉴于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"...]
考虑一下这个解决方案
function getOccurences(jsonObject, path) {
path = '$..' + path.replace('.','..');
return jsonPath(jsonObject, path);
}
你可以这样称呼它:
getOccurences(someJsonData, 'organization.LongName')
你可以试试这个。这个很好用
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);
}
}
函数getValuesFromArray(对象,属性)
{
//obj=要在其中查找属性的对象
//property==您要查找的属性
对于(var index=0;index)当您的最佳选择是使用其中一个答案中解释的JSONPath,并将其包装在一个函数中,该函数采用字符串路径并返回所需的属性。您确定吗?在任何情况下,您都不会触及属性,此时可能是类似“Organization.Department.LongName.Name”的内容这意味着您必须遍历整个objectyes,我确信您只需要使用这两个函数声明名为“myArray”的globel数组,并且您可以从任何递归中获取任何属性。