快速查找对象数组中属性的最小值和最大值的方法

时间:2017-04-24 10:41:47

标签: javascript arrays minimax

我有一个像这样的对象数组:

keyword

我希望快速而干净地将min值设置为value属性

arr = [
    {name: "Alex", value: 1}, 
    {name: "Bill", value: 2},
    {name: "Jim",  value: 3},
    {name: "Dim",  value: 5}
]

8 个答案:

答案 0 :(得分:2)

您可以在数组上使用reduce函数min:

arr.reduce(function(prev, curr) {
    return prev.value < curr.value ? prev : curr;
});

max会以类似的方式工作

答案 1 :(得分:1)

&#13;
&#13;
name
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以使用map()返回值数组,然后使用带有扩展语法的Math.max/min

var arr = [{name:'Alex', value:1}, {name:'Bill', value:2},{name:'Jim', value: 3},{name: 'Dim', value:5}]

var values = arr.map(e => e.value);
var min = Math.min(...values);
var max = Math.max(...values);

console.log(max)
console.log(min)

答案 3 :(得分:1)

您可以map值并使用Math函数获取最高值和最低值。

var arr = [{name:'Alex', value:1}, {name:'Bill', value:2},{name:'Jim', value: 3},{name: 'Dim', value:5}],
    hash = arr.map(v => v.value),
    min = Math.min.apply(Math, hash),
    max = Math.max.apply(Math, hash);
    
    console.log(min, max);

或者只是根据value属性对对象数组进行排序,然后选择第一个和最后一个。

var arr = [{name:'Alex', value:1}, {name:'Bill', value:2},{name:'Jim', value: 3},{name: 'Dim', value:5}],
    hash = arr.sort((a,b) => a.value - b.value);
    min = hash[0].value;
    max = hash[hash.length-1].value;
    
    console.log(min, max);

答案 4 :(得分:1)

大多数表演者可能是一个简单的循环

&#13;
&#13;
arr = [
    {name: "Alex", value: 1}, 
    {name: "Bill", value: 2},
    {name: "Jim",  value: 3},
    {name: "Dim",  value: 5}
]

let min,max;

for (var i=arr.length; i--;) {
  if ((!min) || arr[i].value < min) min = arr[i].value;
  if ((!max) || arr[i].value > max) max = arr[i].value;
}

console.log(min, max)
&#13;
&#13;
&#13;

写作最短,类似

&#13;
&#13;
arr = [
    {name: "Alex", value: 1}, 
    {name: "Bill", value: 2},
    {name: "Jim",  value: 3},
    {name: "Dim",  value: 5}
]

let m=Math,a=arr.map(z=>z.value);let [min,max]=[m.min(...a),m.max(...a)];

console.log(min,max)
&#13;
&#13;
&#13;

答案 5 :(得分:1)

您可以创建一个功能来为您完成,每次需要找到最小值/最大值时,只需要一行:

function findMM (arr) {
    var minV;
    var maxV;
    var firstLoop = true;
    arr.forEach(function(object){
        if (firstLoop) {
            minV = object.value;
            maxV = object.value;
            firstLoop = false;
        } else {
            if (object.value < minV){ minV = object.value }
            if (object.value > maxV){ maxV = object.value }
        }
    });
    return {min: minV, max: maxV};
}

//using the function
var results = findMM(arr);
console.log(JSON.stringify(results)); //output: {"min":1,"max":5}

答案 6 :(得分:1)

您可以使用原生Array.prototype.sort()对数组进行排序,并获取第一个和最后一个值。

let data = [{
    name: 'Ales',
    value: 1
  },
  {
    name: 'Dim',
    value: 5
  },
  {
    name: 'Bill',
    value: 2
  },
  {
    name: 'Jim',
    value: 3
  }
];

data = data.sort((a, b) => a.value - b.value);

let min = data [0].value;
let max = data [data .length - 1].value;


console.log('min:',  min);
console.log('max:', max)

注意:

如果您改为使用:

let min = data [0];
let max = data [data .length - 1];

你可以返回具有最小值或最大值的完整对象,这可能很方便。

答案 7 :(得分:1)

使用reduce()

var arr = [{name:'Alex', value:1}, {name:'Bill', value:2},{name:'Jim', value: 3},{name: 'Dim', value:5}]

var result = arr.reduce(function(acc, val){
    return { min: Math.min(acc.min, val.value),
            max: Math.max(acc.max, val.value)}
    }, {min: arr[0].value, max: arr[0].value});

console.log(result.max);
console.log(result.min);