2016-01-21 23 views
0

我有對象的數組,像這樣:如何平展一組對象以返回我需要的確切結果?

0: Object 
1: Object 
2: Object 
3: Object 
4: Object 

然後當你打開每個對象了,我有一些數據裏面,像這樣:

id: "restore-product" 
result: 0 

目前的數據是像上面,但輸出什麼我喜歡的是能夠操縱它,這樣我可以得到的對象返回數組看起來像這樣:

[[id:"restore-product",result:0],[id:"enhance-product",result:20]] 

然後在時機成熟時,我可以循環通過電子郵件ach項目,並從對象中找出最高值並獲取最高值的id。

目前我有這個功能是推動項目到數組:

var amounts = []; 
    $.each(entries, function(i, entry){ 

     amounts.push(entry); 

    }); 

==這裏編輯===

這是我用得到的最高值:

var lowest = Number.POSITIVE_INFINITY; 
var highest = Number.NEGATIVE_INFINITY; 
var tmp; 
for (var i=entries.length-1; i>=0; i--) { 
    tmp = entries[i].result; 
    if (tmp < lowest) lowest = tmp; 
    if (tmp > highest) highest = tmp; 
} 
console.log(highest, lowest); 

任何人都可以指向正確的方向嗎?

+0

你後的響應類型是不可能的JS,你不能在數組中具有命名參數。你可以做的最好的是一組對象 - 它完全是你已經擁有的。您爲什麼要嘗試更改數據? –

+0

我需要能夠從數組中獲得最高結果並將其映射到該ID。簡單地說,獲得數組中最高值的id –

+0

輸出有什麼問題[{id:'somesting',parameter:'other'},{id:'something else',parameter:'otherrr'}]?你可以遍歷所有的對象並操作所有的屬性 –

回答

0

有一個簡單的方法找到匹配ID的最高值。只需設置兩個跟蹤器變量並在數組中移動時更新它們。

var id = null; 
var localMax = Number.MIN_SAFE_INTEGER; 
for (var i = 0; i < entries.length; i++) { 
    var obj = objects[i]; 
    if (obj.result > localMax) { 
    id = obj.id; 
    localMax = obj.result; 
    } 
} 
+0

這樣做是否可以檢查所有這些數據並丟棄較低的數據結構,並且只能得到所有對象中的最高結果,因爲總共有5個結果次? –

+0

@Mdunbavan是的,這將通過所有這些,只得到最高的一個。 –

+0

這個答案有可能獲得第二高的值嗎? –

0

你需要的功能是這樣的:

function getIdFromMaximumResult(arr) { 
    var id, maxResult = Number.MIN_SAFE_INTEGER; 
    $.each(arr, function(i, object) { 
    if (object.result > maxResult) { 
     maxResult = object.result; 
     id = object.id; 
    } 
    }); 
    return id; 
} 
0

最簡單的方法是將數組進行排序,並採取任何最後(升序排序)或從第一(降序排序)值結果。

升序排列

var sorted = yourArray.sort(function(a, b) { 
     return a.result < b.result ? -1 : +(a.result > b.result); 
    }), 
    highest = sorted[sorted.length - 1]; 

console.log(highest.id); 

你也可以使用sorted.pop()但請注意,這實際上從原始數組中刪除的項目太多。

降序排序

var sorted = yourArray.sort(function(a, b) { 
     return a.result > b.result ? -1 : +(a.result < b.result); 
    }), 
    highest = sorted[0]; 

console.log(highest.id); 

你也可以使用sorted.shift()但請注意,這實際上從原始數組中刪除的項目太多。


如果您需要任何進一步的行動,例如讓所有的ID,其結果符合最高的(如果有的話),你現在可以使用其他陣列的方法,如filter

var sameResult = yourArray.filter(function(data) { 
     return data.result === highest.result; 
    }); 

console.log(sameResult); 

如果希望只包含ID的數組,使用map

var idOnly = sameResult.map(function(data) { 
     return data.id; 
    }); 

console.log(idOnly); 
0

您可以使用Array.prototype.reduce()

var minMax = data.reduce(function(minMax, curr){ 
    minMax.min = curr.result < minMax.min ? curr.result : minMax.min; 
    minMax.max = curr.result > minMax.max ? curr.result : minMax.max; 
    return minMax; 
},{min:Number.POSITIVE_INFINITY, max: Number.MIN_SAFE_INTEGER}); 

console.log(minMax)// {min:0, max:323} 
相關問題