javascript数组查找最高值
我有一个数组,我需要找到它的最高值,所以当我将它应用到Highchart时,如果它超过用户输入的某个动态数字,我可以给背景上色 我的代码如下所示:javascript数组查找最高值,javascript,arrays,parsing,Javascript,Arrays,Parsing,我有一个数组,我需要找到它的最高值,所以当我将它应用到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.len
<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>');
}
var maxVals = array.map(Function.apply.bind(Math.max, Math));
变量数组={
数据:[123234456789],
数据:[321654987],
数据:[963852741]
};
对于(var i=0;i
我得到的只是电话号码
<div>963</div>
<div>963</div>
<div>963</div>
963
963
963
您的数组
变量不是数组([]
),而是对象({}
)。对象中有多个项具有键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>');
var数组=[
{数据:[123234456789]},
{数据:[321654987]},
{数据:[963852741]}
];
var值=[];
对于(变量i=1;i
或者完全删除
数据
,将其作为数组数组。好吧,这不是数组,它是一个具有重复键的对象,所以您只是循环最后一个覆盖所有其他键的对象
试试这个
var obj={
答:[123234456789],
[321654987],
c:[963852741]
};
var max=[];
用于(obj中的var i){
最大推力(数学最大应用(0,obj[i]);
}
$('#highest').append(''+max.join('')+'');
尽管您可以只使用一个对象数组。您使用的是多个同名键,这不是有效的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-arr=[
[123, 234, 456, 789],
[321, 654, 987],
[963, 852, 741]
];
对于(变量i=0;i
您可以使用对象执行此操作,但我看不出有任何理由这样做,除非您正在从服务或其他内容读取此数据,并且无法更改其格式。不确定您在这里尝试执行的操作。该“数组”变量定义为对象。 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>');
}
var数据=[
[123, 234, 456, 789],
[321, 654, 987],
[963, 852, 741]
];
对于(变量i=0;i
首先创建一个合适的嵌套数组集。然后您可以使用.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);
});
或者像这样:
<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>');
}
var maxVals = array.map(Function.apply.bind(Math.max, Math));
我只想添加另一种更简化的方法
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));
最后,您还可以使用排序方法替换后一个reduce:
var max = Object.values(obj)
.reduce((a, d) => a.concat(d), [])
.sort((l, r) => l - r)
.pop();
你不觉得你在循环,却不使用
i
做任何事情很奇怪吗?使用for in
在对象上循环。给唯一的钥匙i
在循环条件下被使用,所以它不是什么都没做你觉得奇怪吗,你的obects钥匙都一样,相互覆盖->是的,但它告诉我,无论我把i贴在哪里,我都错了-我一定是周五的早病例,因为我不能把我的头绕到这个BTW上,您不需要像这样提供数学函数,只需使用null即可。不幸的是,我无法更改数据对象-它来自服务器动态生成的json。然后我建议您在服务器上跟踪问题,并在继续之前在那里修复它。重复的键是错误的,根据定义,键必须是唯一的。有人想解释下一票吗?我试图表达问题的精神,而不是对每一个问题都给出字面上的答案[在一个非常奇怪的阵列中,你发布了这篇文章。我真的想回答你。我一直在想如何用你的第二种方法来做这件事,并且想出了同样的方法。太奇怪了。快速提问-你为什么使用函数。apply
而不是函数。prototype。apply
?我一直在想,bec因为我见过人们使用数组。无论是什么而不是数组。原型。无论是什么@Ian:这是一种更快的方法。因为函数是一个函数,我们不需要去原型。我们可以使用isNaN。如果我们愿意,可以应用数组。无论是什么函数,他们都在使用Firefox功能这可以很容易地在其他浏览器中使用。好吧-当我将你的答案应用到我的实际源数组时,它实际上起了作用-哈哈-我想这是我最初尝试的,但我的示例数组是错误的。