首页 > 解决方案 > 在包含 NaN 值的对象数组中查找最大值

问题描述

我有一个对象数组,我想获得最大值prevalence

我试试这段代码:

// max of selected vaccine
var ex = [{"name": "a", "prevalence": "NaN"},
	{"name": "a", "prevalence": "5"},
	{"name": "b", "prevalence": "0"},
	{"name": "a", "prevalence": "NaN"},
	{"name": "c", "prevalence": "100"},
	{"name": "c", "prevalence": "20"},
	{"name": "a", "prevalence": "3"}];
console.log('ex:', ex);

var maxPrevalence = d3.max(ex, function(d) {
	if(!isNaN(d.prevalence)) {
		return d.prevalence;
	}
});
console.log('\nmaxPrevalence:', maxPrevalence);
<script src='https://d3js.org/d3.v5.js' charset='utf-8'></script>

但结果5并非如此100

我不必使用 d3 函数,即使是纯 javascript 也可以。

标签: javascriptmax

解决方案


'NaN'的 s 是字符串,而不是实际NaN的 s,但无论如何,您可以在测试时reduce进入:Math.maxprevalence

var ex=[{"name":"a","prevalence":"NaN"},{"name":"a","prevalence":"5"},{"name":"b","prevalence":"0"},{"name":"a","prevalence":"NaN"},{"name":"c","prevalence":"100"},{"name":"c","prevalence":"20"},{"name":"a","prevalence":"3"}];
const max = Math.max(...ex.reduce(
  (accum, { prevalence }) =>
    isNaN(prevalence) ? accum : [...accum, prevalence],
  [])
);
console.log(max);


推荐阅读