我有一个这种格式的JavaScript数组:
var dimensions = [
{dim: 590, token:'...'},
{dim: 800, token:'.....'},
{dim: 2500, token:'........'}
];
dimensions
数组中的数据是动态填充的,即我不知道它是零,一个还是50个具有dim
和token
属性的对象。
我需要从具有最大值token
和最小值dim
的对象中选择dim
。任何人都知道我该怎么做?
答案 0 :(得分:1)
我建议使用Array.prototype.reduce()
。它返回一个带有数组的最小和最大对象的对象。
var dimensions = [
{ dim: 590, token: '...' },
{ dim: 800, token: '.....' },
{ dim: 2500, token: '........' }
],
result = dimensions.reduce(function (r, a) {
r.min = r.min || a;
r.max = r.max || a;
return {
min: r.min.dim < a.dim ? r.min : a,
max: r.max.dim > a.dim ? r.max : a
};
}, {});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
答案 1 :(得分:0)
var dimensions = [
{dim: 590, token:'...'},
{dim: 800, token:'.....'},
{dim: 2500, token:'........'}
];
// Sort the function in ascending order and pick the first and the last element.
var minmax = dimensions.sort(function(a,b){
return a.dim - b.dim;
}).filter(function(el, i){
return i==0 || i==dimensions.length-1;
});
// minmax will have two values, first will be minimum and second will be the largest.
console.log("Smallest: "+minmax[0].token);
console.log("Largest: "+minmax[1].token);
答案 2 :(得分:0)
sort dimensions
数组首先按升序排列,然后获得最小且最大的token
值
dimensions.sort(function(a, b) {
return parseInt(a.dim) - parseInt(b.dim);
});
var smallest = dimensions[ 0 ].token;
var largest = dimensions[ dimensions.length - 1 ].token;
答案 3 :(得分:0)
首先使用sort
函数sort
array
,然后从数组中选择first
和last
元素。
dimensions.sort(function(a,b)
{
return a.dim - b.dim
});
var tokenOfSmallest = dimensions[0].token;
var tokenOfLargest = dimensions[dimensions.length - 1].token;
答案 4 :(得分:0)
虽然这里提供的大多数答案都是正确的,但它们并不是解决您问题的最佳解决方案(Nina Scholz除外)。
通过Array.sort()
对数组进行排序需要{-1}}的Big-O复杂度,但您的问题肯定可以通过更快的O(n*log(n))
算法来解决。
O(n)
答案 5 :(得分:-1)
您可以减少数组以查找最大/最小值:
var result = dimensions.reduce(function(r, item) {
r.max = !r.max || r.max.dim < item.dim ? item : r.max;
r.min = !r.min || r.min.dim > item.dim ? item : r.min;
return r;
}, {});
console.log(result.max.token);
console.log(result.min.token);