Angular:如何在嵌套数组中搜索?

时间:2015-12-03 15:06:20

标签: javascript angularjs

我需要一个函数来搜索/过滤嵌套数组中的最大值,然后返回父范围。

接下来是我的阵列:

 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

2 个答案:

答案 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/

中使用的此代码

我假设您的数据结构已修复