2017-04-24 15 views

回答

1

最高效的可能會是一個簡單的循環

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)

最短寫,像

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)

1

var min = Number.POSITIVE_INFINITY, 
 
    max = Number.NEGATIVE_INFINITY; 
 

 
arr.forEach(function(obj) { 
 
    min = Math.min(min, obj.value); 
 
    max = Math.max(max, obj.value); 
 
});

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)

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);

2

可以使用reduce功能的陣列上分:

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

最大將以類似的方式工作

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} 
1

你可以用nati排序你的數組ve 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]; 

你可以返回完整的對象,它有一個最低或最高值,這可能是得心應手。

+0

我試圖鍵入「史詩」,但stackoverflow每個評論強加一個最小數量的字符,所以是的,這是我的亂碼 – Webeng

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); 
相關問題