Javascript数组查找最大值
javascript array find highest value
我有一个数组,我需要找到最大值,所以当我将它应用到Highchart时,如果它超过用户输入的动态数字,我可以为背景上色。
我的代码是这样的:
<div id="highest"></div>
var array = {
data: [123, 234, 456, 789],
data: [321, 654, 987],
data: [963, 852, 741]
};
for (var i=0; i < array.data.length; i++){
var m = Math.max.apply(Math, array.data);
$('#highest').append('<div>'+m+'</div>');
}
我得到的是数字
<div>963</div>
<div>963</div>
<div>963</div>
您的array
变量不是数组([]
),它是对象({}
)。在键为data
的对象中有多个项,但是每个键只允许一个值。
你实际上写的是:
var array = {
data: [963, 852, 741]
};
也许你想要这样的东西?var array = [
{data: [123, 234, 456, 789]},
{data: [321, 654, 987]},
{data: [963, 852, 741]}
];
var values = [];
for (var i=1; i < array.length; i++) {
values.push.apply(values, array[i].data);
}
$('#highest').append('<div>' + Math.max.apply(Math, values) + '</div>');
或者完全去掉data
,让它成为数组的数组
首先创建一个合适的嵌套数组集。然后你可以使用.map()
:
var array = [
[123, 234, 456, 789],
[321, 654, 987],
[963, 852, 741]
];
var maxVals = array.map(function(a) {
return Math.max.apply(Math, a);
});
或者像这样:
var maxVals = array.map(Function.apply.bind(Math.max, Math));
这不是一个数组,它是一个具有重复键的对象所以你只是循环最后一个覆盖其他所有键的对象
试试这个http://jsbin.com/olahuq/2/edit
var obj = {
a: [123, 234, 456, 789],
b: [321, 654, 987],
c: [963, 852, 741]
};
var max = [];
for (var i in obj) {
max.push(Math.max.apply(0, obj[i]));
}
$('#highest').append('<div>'+ max.join('</div><div>') +'<div>');
尽管你可以直接使用对象数组
不知道你在这里想做什么。这个"数组"变量被定义为一个对象。JavaScript中的对象字面量需要唯一的键。最后一个由"array"对象中的"data"键控的数组是解释器唯一选取的数组。
你可能想要这个?
var data = [
[123, 234, 456, 789],
[321, 654, 987],
[963, 852, 741]
];
for (var i=0; i < data.length; i++){
var m = Math.max.apply(Math, data[i]);
$('#highest').append('<div>'+m+'</div>');
}
您正在使用具有相同名称的多个键,这不是有效的JavaScript(好吧,代码仍然可以运行,但您不会得到您期望的结果)。这很容易修复,但只需使用一个数组:
var arr = [
[123, 234, 456, 789],
[321, 654, 987],
[963, 852, 741]
];
for (var i=0; i < arr.length; i++){
var m = Math.max.apply(Math, arr[i]);
$('#highest').append('<div>'+m+'</div>');
}
你可以对一个对象这样做,但我不认为有任何理由这样做,除非你从一个服务或其他地方读取数据,不能改变它的格式。
我只是想添加一个更简化的方法。
var obj = {
a: [123, 234, 456, 789],
b: [321, 654, 987],
c: [963, 852, 741]
};
var max = Math.max.apply(0, [].concat.apply([], Object.values(obj)));
然而,在生产代码中使用可能会混淆,为了更好的可读性,我宁愿使用reduce
。
var max = Object.values(obj)
.reduce((a, d) => a.concat(d), [])
.reduce((p, c) => Math.max(p, c));
最后,您还可以用sort方法替换后面的reduce:
var max = Object.values(obj)
.reduce((a, d) => a.concat(d), [])
.sort((l, r) => l - r)
.pop();
相关文章:
- 在Javascript数组中查找绝对最大值
- 使用函数从数组中查找最小值和最大值
- 正在查找对象集合的最大值
- 在JavaScript多维数组中查找每个x值的最大值
- 在稀疏 JavaScript 数组中查找最大值
- 在带有对象的数组中查找最小值、最大值
- 使用 JavaScript 函数在数组中查找最大值
- 查找局部最大值
- 用于从数组中查找最大值的javascript代码
- 在“跨记录”中查找XML属性的最大值
- 从一个数组中查找一个属性的最大值,并将其传递给新数组
- Javascript正在查找最大值
- 在javascript数组中查找最小-最大值
- 递归地查找数组中的最大值
- 查找子对象的最大值
- Javascript数组查找最大值
- jQuery/JavaScript查找表列中的最大值
- 在数组的数组中查找最大值
- 查找具有最大值的父对象
- 查找幂集的加权子集和的最大值