我需要一个函数来搜索/过滤嵌套数组中的最大值,然后返回父范围。
接下来是我的阵列:
data = {"people":
[{"male": [
{"name": "Bob" ,"age": "32"},
{"name":"Mike", "age":"22"}
]},
{"female": [
{"name":"Jessica", "age": "24"},
{"name":"Ann", "age": "23"}
]}]}
我需要找到所有人的最大年龄值然后返回男性或女性阵列(例如这是男性阵列)
使用javascript我可以使用类似的东西:
largest = array.reduce((x, y) ->
if x > y then x else y
)
console.log largest
但是如何实现嵌套数组呢?
或者有没有办法使用角度$filter
?
答案 0 :(得分:0)
您可以在此处查看如何搜索嵌套对象:Find by key deep in a nested object
然后你可以遍历数组中的所有项目来搜索它们。
如果你能保证你的数组和那些嵌套对象的结构,我建议采用一种相当不同的方法。 首先,你循环遍历阵列(男/女),并为每个人循环通过人并找到他们的年龄。 它不是确切的代码,而是类似的东西:var age = 0;
data["people"].forEach(function(item) {
for (var key in item) {
if (item.hasOwnProperty(key)) {
item[key].forEach(function(person) {
if (person.age > age) {
age = person.age;
}
});
}
}
});
console.log(age);
答案 1 :(得分:0)
这是一个丑陋的数据表示,但无论如何:
var data = {"people":
[{"male": [
{"name": "Bob" ,"age": "32"},
{"name":"Mike", "age":"22"}
]},
{"female": [
{"name":"Jessica", "age": "24"},
{"name":"Ann", "age": "23"}
]}]};
function getMaxAge(array) {
var max = 0;
array.forEach(function(people) {
if (people.age > max) max = people.age;
})
return max;
}
var max = 0;
var arrayWithMax;
for (var i = 0; i < data.people.length; i++) {
var array = data.people[i][Object.keys(data.people[i])[0]];
var currentMax = getMaxAge(array);
if (currentMax > max) {
max = currentMax;
arrayWithMax = array;
}
}
console.log('max age: ' + max)
console.log(arrayWithMax);
请参阅https://jsfiddle.net/ave5hcLu/
中使用的此代码我假设您的数据结构已修复