javascript数组查找最高值

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

我有一个数组,我需要找到它的最高值,所以当我将它应用到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>');
}
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功能这可以很容易地在其他浏览器中使用。好吧-当我将你的答案应用到我的实际源数组时,它实际上起了作用-哈哈-我想这是我最初尝试的,但我的示例数组是错误的。