2017-04-24 16 views
1

私はこのようなオブジェクトの配列があります。私が欲しい迅速な方法は、

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

分を持っているために迅速かつクリーンな方法の最大値valueプロパティは

min = 1, 
max = 5 
+0

はitem.valueは順序で配置されていますか? – GibboK

+0

いいえ、それは無作法です – user7334203

答えて

1

最もパフォーマンスおそらく、

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)
ような何か単純なループ

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.reduce(function(prev, curr) { 
    return prev.value < curr.value ? prev : curr; 
}); 

最大は、同様の方法で

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

あなたはを使用することができますを使用して値の配列を返し、Math.max/minにspread構文を使用します。

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

最小/最大値を求めるのに必要な時間は、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

を働くだろうあなたはあなたのためにそれを行うための関数を作成し、すべてのことができます:あなたは分間アレイ上reduce機能を使用することができます

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

をあなたは便利かもしれない最小または最大値を、持っている完全なオブジェクトを返すことができます。 reduce()使用

+0

私は "叙事詩"とタイプしようとしていましたが、stackoverflowはコメントごとに最小量の文字を課すので、これは私のジッバーリッシュです – Webeng

1

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