查找数组

时间:2015-12-07 10:47:14

标签: javascript angularjs

我有数组,我用key搜索最大的年龄值,但在我发现之后我需要通过从搜索中排除第一个的父级来找到下一个。这是数组和函数示例:

//Data
data = {"people": 
   [{"male": [
     {"name": "Bob" ,"age": "32"}, 
     {"name":"Mike", "age":"31"}
    ]}, 
   {"female": [
     {"name":"Jessica", "age": "24"}, 
     {"name":"Ann", "age": "23"}
   ]}]}

// Function
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;

                }

            });
        }
    }
});

因此,根据此示例,我需要从24获取female。请给我一些建议。

JSFIDDLE

4 个答案:

答案 0 :(得分:0)

在您的情况下,您可以检查仅限女性的物体。

var maxFemaleAge = 0;

data["people"].forEach(function(item) { 
    for (var key in item) {
        if (key==='female' && item.hasOwnProperty(key)) {
            item[key].forEach(function(person) {
                if (person.age > maxFemaleAge) {
                    maxFemaleAge = person.age;
                }
            });
        }
    }
});
console.log(maxFemaleAge);

这将显示控制台中的最大女性年龄。 的 Fiddle

答案 1 :(得分:0)

通常,您会以这种方式找到每个键的最大值:

var max = {}
...//for each key
max[key] = 0
...//for each val
if(val > max[key]){
  max[key] = val
}
...

答案 2 :(得分:0)

如果我理解你想要做的事情,你可以把它减少到另一个数组:

var ages = data["people"].reduce(function(prev, item) {
    var max = 0;
    for (var key in item) {
        if (item.hasOwnProperty(key)) {
            item[key].forEach(function(person) {
                if (person.age > max) {
                    max = person.age;
                }
            });
        }
        prev.push(max);
        return prev;
    }
}, []);

console.log(ages); // 32, 24

答案 3 :(得分:0)

如果对象中没有太多元素,您也可以使用类似这样的排序:Sorting an array of JavaScript objects 目前,对象的结构对于该方法而言并非最佳。在第一步,您应该将条目带入可迭代结构。例如:

var persons = [
     {"name": "Bob", "age": "32", "sex": "male"},
     {"name": "Jessica", "age": "24", "sex": "female"},
     {...}];

当您的数据看起来更容易使用它时。

您可以非常轻松地对您的人员进行排序:

persons.sort(function(a,b){return b.age - a.age})

如果你想做一些更复杂的事情,你也可以使用map方法:

females = persons.map(function(a){if (a.sex ==="female"){return a}});

当你结合这两种技术时,你可以很容易地找到最年长的女性或男性。

该解决方案更多的是" JavaScript"办法。代码不多,易于阅读并使用JS方法构建。