我有一个JavaScript对象,并希望获得所有条目的最高价值。 我已经尝试过了:
d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
}
Object.keys(d).map(
function(k) {
Math.max.apply(Math, d[k].map(
function(e) {
console.log(value);
}
))
}
)
结果应为1000。
答案 0 :(得分:7)
...
并展平数组之后,可以在Math.max
中使用扩展语法map
。
const d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
}
const max = Math.max(...[].concat(...Object.values(d)).map(({value}) => value))
console.log(max)
答案 1 :(得分:2)
使用Object.values
,flatMap
和Math.max
进行传播。
const d = {"A":[{"value":10},{"value":20},{"value":30}],"B":[{"value":50},{"value":60},{"value":1000}]};
const res = Math.max(...Object.values(d).flat().flatMap(Object.values));
console.log(res);
由于flat
不受很好的支持(flatMap
也不受支持),因此您也可以使用reduce
。
const d = {"A":[{"value":10},{"value":20},{"value":30}],"B":[{"value":50},{"value":60},{"value":1000}]};
const res = Math.max(...Object.values(d).map(e => e.map(Object.values)).reduce((a, c) => [].concat(...a, ...c)));
console.log(res);
答案 2 :(得分:0)
如果您要使用es5代码,请尝试以下操作:
var d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
};
var results = [];
for(var key in d)
{
d[key].forEach(function (obj){
results.push(obj.value);
});
}
console.log(Math.max.apply(null, results));
答案 3 :(得分:0)
尝试类似方法,首先将值展平,然后按升序对其进行排序,然后从排序后的数组中取出最后一个元素:
const data = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30 } ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
};
const highestValue = Object.values(data)
.flatMap(x => x)
.sort((a, b) => a.value - b.value)
.slice(-1);
console.log(highestValue);
答案 4 :(得分:0)
d = {
"A": [{ "value": 10 }, { "value": 20 }, { "value": 30 }],
"B": [{ "value": 50 }, { "value": 60 }, { "value": 1000 }],
}
var maxValue = Math.max.apply(null,Object.keys(d).map(key => Math.max.apply(null,d[key].map(x => x.value))));
console.log(maxValue);
答案 5 :(得分:0)
您可以使用好的旧循环
let d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
}
let maxValue;
for (let key in d)
{
for (let i = 0, len = d[key].length; i < len; ++i)
{
if (maxValue === undefined || maxValue < d[key][i].value)
maxValue = d[key][i].value;
}
}
console.log(maxValue);
答案 6 :(得分:0)
由于没有Array.flat和Array.flatMap都没有支持,所以没有Array.reduce,Object.values和Array.map的解决方案:
const d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
}
let r = Math.max(...Object.values(d).reduce((r,c)=>[...r,...c]).map(x => x.value))
console.log(r)
这个想法是使用Object.values
直接获得对象的值。然后使用Array.reduce
进行数组的展平,并使用Array.map
提取value
。然后传播到Math.max
以获得最终结果。
答案 7 :(得分:0)
对于实际的JSON字符串,可以在解析过程中完成:
var max = -Infinity, json = '{"A":[{"value":10},{"value":20},{"value":30}],"B":[{"value":50},{"value":60},{"value":1000}]}'
JSON.parse(json, (k, v) => max = v > max ? v : max)
console.log( max )
对于JavaScript对象:
const d = { "A": [ {"value": 10}, {"value": 20}, {"value": 30 } ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000 } ] }
console.log( Math.max(...Object.values(d).flat().map(x => x.value)) )
答案 8 :(得分:0)
仅简单地使用map并将它们缩小和链接在一起就可以为您提供所需的最大值。 我虽然使用了下划线js,但您可以使用简单的map和reduce方法。
var d = {
"A": [ {"value": 10}, {"value": 20}, {"value": 30} ],
"B": [ {"value": 50}, {"value": 60}, {"value": 1000} ],
"C": [ {"value": 30}, {"value": 90}, {"value": 300} ],
}
var maxvalue = _.reduce(_.map(d,(items)=>{
return _.reduce(items , (p,i)=>{
return p> i.value ? p: i.value;
},0)
}) , (maxy, iter)=>{
return maxy > iter ? maxy: iter;
},0);