从 JavaScript 对象中的键中查找最高值
Find highest value from a key in a JavaScript object
我有以下对象:
var questions = [{
'question_id': 245,
'question': 'Question 1',
'ordinal': 1,
'master_difficulty': 1,
'overridden_difficulty': ''
},{
'question_id': 34,
'question': 'Question 2',
'ordinal': 2,
'master_difficulty': 1,
'overridden_difficulty': ''
},{
'question_id': 656,
'question': 'Question 3',
'ordinal': 3,
'master_difficulty': 1,
'overridden_difficulty': ''
},{
'question_id': 86,
'question': 'Question 4',
'ordinal': 4,
'master_difficulty': 1,
'overridden_difficulty': ''
}]
我想从中获得最高的序数值。
例如 var highestOrdinal = highestOrdinalFunction(questions);
其中highestOrdinalFunction
将返回最高序数。
所以在这种情况下,它会返回4
.
Math.max
能为此工作吗?
Array#reduce
(spec |MDN)是做这样事情的惯用方法:
function highestOrdinalFunction() {
return questions.reduce(function(previous, entry) {
return previous === undefined || entry.ordinal > previous ? entry.ordinal : previous;
}, undefined);
}
Array#reduce
重复调用回调,传入回调的先前返回值,该值与第二个参数一起播种以reduce
。该东西通常被称为还原操作的"累加器"。reduce
的结果是累加器的最终值。
如果questions
为空,则上述内容将返回undefined
。
我想这就是你要找的:
Math.max.apply(Math,questions.map(function(ques){return ques.ordinal;}))
请参考 Array.prototype.map 了解有关 map() 如何工作的更多信息。
我们可以按
ordinal
值对该数组中的对象进行排序,然后返回第一个条目。
function highestOrdinalFunction( questions ) {
return questions.sort( ( a, b ) => a.ordinal - b.ordinal )[ 0 ].ordinal;
}
在这种情况下,将Array.prototype.map
与Math.max()
相结合可能是一个更好的主意:
Math.max.apply( null, questions.map(q => q.ordinal) );
您可以通过两种方式找到最大值。可以传递函数来映射属性的值,也可以直接在项上调用属性。其结果将是要应用于Math.max
项列表的映射值。
数学原型.max
var questions = [
{'question_id':245,'question':'Question 1','ordinal':1,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':34,'question':'Question 2','ordinal':2,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':656,'question':'Question 3','ordinal':3,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':86,'question':'Question 4','ordinal':4,'master_difficulty':1,'overridden_difficulty':''}
]
document.body.innerHTML = 'Via Function: ' + highestOrdinalValueFn(questions) + ''n';
document.body.innerHTML += 'Via Property: ' + highestOrdinalValueProp(questions);
// #1 : Via function
function highestOrdinalValueFn(items) {
return max(items, function() {
return this.ordinal;
});
}
// #2 : Via property
function highestOrdinalValueProp(items) {
return max(items, 'ordinal');
}
function max(list, prop) {
return Math.max.apply(Math, list.map(function(item) {
return isFunction(prop) ? prop.call(item) : item[prop];
}));
}
function isFunction(fn) {
return fn && {}.toString.call(fn) === '[object Function]';
}
body { white-space: pre; font-family: monospace; }
Array.prototype.reduce
var questions = [
{'question_id':245,'question':'Question 1','ordinal':1,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':34,'question':'Question 2','ordinal':2,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':656,'question':'Question 3','ordinal':3,'master_difficulty':1,'overridden_difficulty':''},
{'question_id':86,'question':'Question 4','ordinal':4,'master_difficulty':1,'overridden_difficulty':''}
]
document.body.innerHTML = highestValue(questions, 'ordinal');
function highestValue(items, prop) {
return compare(items, function(curr, prev) {
return maxNumericComparator(curr, prev, prop);
})[prop];
}
function maxNumericComparator(curr, prev, prop) {
if (curr && !prev) return -1;
if (!curr && prev) return 1;
if (curr[prop] && !prev[prop]) return -1;
if (!curr[prop] && prev[prop]) return 1;
if (curr[prop] > prev[prop]) return -1;
if (curr[prop] < prev[prop]) return 1;
return 0;
};
function compare(list, comparator) {
return list.reduce(function(max, item) {
return comparator(item, max) < 0 ? item : max;
}, null);
}
相关文章:
- Kendo网格中数据集的最高值
- 从嵌套对象属性中获取排除某个值的最高值
- 如何将查找对象值传递到FetchXml查询中
- JS在封装对象中查找键值对
- 如何使用javascript获取两个变量的最高值
- 如何从内联类中获取最高值
- 如果我知道另一个值,请在多维数组中查找一个值
- 如何在多维数组中查找重复值
- 从具有最高值的对象返回属性
- 在一串数字中查找特定值
- Javascript,Undercore试图返回具有最高值的对象的键
- 在数组中查找颜色值(以#开头的字符串)
- Javascript:查找一个值在JSON中出现的次数
- 在javascript中的page ready中查找输入值修改的来源
- 从Javascript中的JSON对象中查找键值
- JavaScript 复选框表 - 如何添加值并查找最高值
- 从 JavaScript 对象中的键中查找最高值
- 在JavaScript变量中查找最高值
- 在javascript中查找具有公共键的哈希数组的最高值
- 流星:查找具有最高值的文档