2015-11-04 47 views
0

我遇到了一個問題,我在這裏查看了一些簡化問題,我似乎無法將我的頭圍繞一種方式來執行此操作。我有一個對象數組。每個對象具有相同的屬性,其中大約30個。每個屬性都有完全不同類型的信息。我希望能夠輕鬆創建一個新的對象/數組。我的例子如下。Javascript函數可能使用reduce/map來計算對象屬性的嵌套數組

var array = [{parts: 12345, purchased: "yes", customerId: 12541}, 
      {parts: 12432, purchased: "no", customerId: 55514}, 
      {parts: 12345, purchased: "Yes", customerId: 44421}]; 

我想要做的是找到一種方法,根據數組中的信息類型提取有用的數據。例如:

some_function(array) { 
      ... 
      return { parts: {uniquePart: 12345, timesListed: 2}}; 
      } 
    } 

我可能還想擴展那個返回的對象並計算購買的次數是yes還是no。我嘗試過很多方法,但我認爲這比數據編程問題更像是數據模型問題。

我正在解析這些數據的收據字符串。一旦純文本字符串解析,我得到一個大的30個屬性對象爲每個事務。一些屬性也是嵌套的對象或數組。

我想跨多個事務關聯數據。也許我需要研究一種更好的方法來處理這種類型的情況。

所以我明白的問題是有點含糊,但我真正想知道的是什麼是給出了以下的數據結構,結束了數組的最佳方式:

{parts: {uniquePart: 12345, timeListed 2}} 

我相信一旦我瞭解如何通過嵌套的對象數組來進行循環,並構建可以從那裏進入的新對象。我目前使用reduce的嘗試沒有取得成果。

array.reduce(acc,obj){return This is where I am a little lost} 
+0

一切都是可能的鏈接映射/過濾器和減少,但你必須非常明確地定義什麼輸出你需要創建。例如:我使用一個函數來獲取數組中的所有唯一值,一個計算對象字段的出現次數,然後是使用這兩個函數創建輸出結構的第三個值。因此定義您的輸出,編寫幾個簡單的縮小/映射,然後重新使用和組合。 – Shilly

+0

這是一個非常模糊的問題,你必須更具體 – webduvet

回答

1

將該溶液設有Array.prototype.forEach,用於臨時對象countObject.keysArray.prototype.map並返回與用於每一個部分一個對象的有用數組。你描述

function getCount(array) { 
 
    var count = {}; 
 
    array.forEach(function (a) { 
 
     count[a.parts] = (count[a.parts] || 0) + 1; 
 
    }); 
 
    return Object.keys(count).map(function (k) { 
 
     return { parts: { uniquePart: k, timesListed: count[k] } }; 
 
    }); 
 
} 
 

 
var array = [{ parts: 12345, purchased: "yes", customerId: 12541 }, { parts: 12432, purchased: "no", customerId: 55514 }, { parts: 12345, purchased: "Yes", customerId: 44421 }]; 
 
document.write('<pre>' + JSON.stringify(getCount(array), 0, 4) + '</pre>');

+0

這正是我正在尋找。所以,如果我正確理解代碼,您可以創建一個臨時對象計數。這個對象包含的東西大致類似於: {12345:0或值+ 1) 然後你運行一個我有點模糊的映射函數,但它基本上需要count對象獲得一個鍵列表,此時Is在那裏我缺乏函數式編程知識。你能解釋一下這個map函數嗎? – bufo333

+1

地圖建立一個新的數組。它返回數組中的每個元素 - 這裏是計數對象的鍵 - 一個值。該值在這種情況下是具有一個屬性部分和所需值的對象。 –

+1

非常感謝,現在我明白了! – bufo333

相關問題