2015-10-15 88 views
-1

我喜欢JSON使用javascript从JSON对象获取最大值?

var JObject = [ 
    { 
     a:"A1", 
     b:100, 
     c:800 
    }, 
    { 
     a:"B1", 
     b:300, 
     c:400 
     } 
    ]; 

我需要从这个JSON最大值...它必须返回800,如果它返回键和列索引

+0

这不是JSON !.你只是有一个对象 –

+0

除了这不是一个'JSON'对象 - 为什么不在迭代中保持一个变量'max'? –

回答

0

你可以做这样的事情

var JObject = [{ 
 
    a: "A1", 
 
    b: 100, 
 
    c: 800 
 
}, { 
 
    a: "B1", 
 
    b: 300, 
 
    c: 400 
 
}]; 
 

 
var res = Math.max.apply(null,JObject.map(function(v) { 
 
// iterate over array element and getting max value from result array 
 
    
 
    var r = []; 
 
    for (var val in v) { 
 
    // iterate over object inside array 
 
    if (v.hasOwnProperty(val)) { 
 
     var num = parseInt(v[val], 10); 
 
     // parsing the value for integer output 
 
     r.push(isNaN(num) ? 0 : num); 
 
     // pushing value to array, in case of `Nan` pushing it as 0 
 
    } 
 
    } 
 
    return Math.max.apply(null,r); 
 
    // getting max value from object values 
 
})); 
 

 
console.log(res);

+0

其工作正常...谢谢:) –

0

你能做出这样或多或少通用的 - 可能缩短它变成一个唱减少陈述。

var data = [ 
    {a:"A1",b:100,c:800}, 
    {a:"B1",b:300,c:400} 
]; 

data 
    .reduce(function(acc, x, i) { 
    if (x.b > x.c) { 
     return acc.concat({key: 'b', value: x.b }); 
    } 
    return acc.concat({key: 'c', value: x.c }); 
    }, []) 
    .reduce(function(acc, x, i) { 
    if (x.value > acc.value) { 
     return { 
     key: x.key, 
     value: x.value, 
     index: i 
     }; 
    } 
    return acc; 
    }, {key: '', value: Number.MIN_VALUE, index: -1}); 
0

如果您使用的是像lodash库或下划线,你可以简单地做:

_.max(_.map(JObject, function(a){ 
    return _.max(_.values(a)); 
})); 

您也可以解决它与降低:

_.reduce(JObject, function(val, a){ return _.max(_.values(a)) > val ? _.max(_.values(a)) : val; },0);

1

由于这是标记在d3。 我会给出一个D3答案。

工作如下

var kary = [ 
 
    { 
 
     a:"A1", 
 
     b:100, 
 
     c:800 
 
    }, 
 
    { 
 
     a:"B1", 
 
     b:1300, 
 
     c:400 
 
     }, 
 
     { 
 
     a:"D1", 
 
     b:300, 
 
     c:400 
 
     } 
 

 
    ]; 
 

 
var max = d3.max(kary, function(d){ return d3.max(d3.values(d).filter(function(d1){ return !isNaN(d1)}))}); 
 

 
console.log(max)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

希望这有助于代码!