2016-08-02 52 views
-1

假設我有對象數組,下劃線環路修改某些對象和去除一些對象

[{"month":"03-2016","isLate":"N","transactionCount":4,"transactionAmount":8746455},{"month":"05-2016","isLate":"N","transactionCount":5,"transactionAmount":-40004952945.61},{"month":"06-2016","isLate":"N","transactionCount":1,"transactionAmount":100000},{"month":"04-2016","isLate":"N","transactionCount":6,"transactionAmount":-117189.89},{"month":"02-2016","isLate":"N","transactionCount":4,"transactionAmount":-5331000},{"month":"04-2016","isLate":null,"transactionCount":2,"transactionAmount":-4888.89},{"month":"03-2016","isLate":null,"transactionCount":3,"transactionAmount":5000}] 

是有在下劃線或JavaScript的函數,其中i可基於一些條件循環在項目上, ,刪除某些對象,或者修改對象(將更多信息添加到對象中)並返回數據。

+0

當然,但你必須要更具體。你想要的條件和輸出是什麼? – trincot

+0

移除沒有isLate「:」N「的元素,並且如果將add屬性修改爲元素mm,其中包含月份字符串'Jan','Feb' –

回答

4

您可以與普通的JavaScript:

  • 除去某些對象:與filter()
  • 修改對象(向對象中添加更多信息):與map()

例如:

var input = [ 
 
    { 
 
    "month": "03-2016", 
 
    "isLate": "N", 
 
    "transactionCount": 4, 
 
    "transactionAmount": 8746455 
 
    }, 
 
    { 
 
    "month": "05-2016", 
 
    "isLate": "N", 
 
    "transactionCount": 5, 
 
    "transactionAmount": -40004952945.61 
 
    }, 
 
    { 
 
    "month": "06-2016", 
 
    "isLate": "N", 
 
    "transactionCount": 1, 
 
    "transactionAmount": 100000 
 
    }, 
 
    { 
 
    "month": "04-2016", 
 
    "isLate": "N", 
 
    "transactionCount": 6, 
 
    "transactionAmount": -117189.89 
 
    }, 
 
    { 
 
    "month": "02-2016", 
 
    "isLate": "N", 
 
    "transactionCount": 4, 
 
    "transactionAmount": -5331000 
 
    }, 
 
    { 
 
    "month": "04-2016", 
 
    "isLate": null, 
 
    "transactionCount": 2, 
 
    "transactionAmount": -4888.89 
 
    }, 
 
    { 
 
    "month": "03-2016", 
 
    "isLate": null, 
 
    "transactionCount": 3, 
 
    "transactionAmount": 5000 
 
    } 
 
]; 
 

 
// Helper array to translate month number to month name 
 
var monthNames = ["January", "February", "March", "April", "May", "June", 
 
    "July", "August", "September", "October", "November", "December" 
 
]; 
 

 
input = input 
 
    // only get the entries which don't have isLate=N: 
 
    .filter(o => o.isLate !== 'N') 
 
    // add a property "mm": 
 
    .map(o => Object.assign(o, { mm: monthNames[+o.month.substr(0,2)-1] })); 
 

 
// Output result 
 
console.log(input);

對於JavaScript環境不具備ES6支持,更換input =語句:

input = input 
    // only get the entries which don't have isLate=N: 
    .filter(function (o) { 
     return o.isLate !== 'N'; 
    }) 
    // add a property "mm": 
    .map(function (o) { 
     o.mm = monthNames[+o.month.substr(0,2)-1]; 
     return o; 
    }); 
+0

這很好,但是我不認爲這是與IE兼容,其給出的錯誤 –

+0

@ua_boaz如果你沒有使用ES6轉換器來轉換代碼,那麼不要使用箭頭函數我不確定爲什麼人們在他們的答案中使用箭頭函數而沒有提到兼容性問題 – undefined

+0

I爲那些使用尚未支持ES6中引入的箭頭功能的瀏覽器的用戶添加了ES5代碼。 – trincot

2

是與過濾器()

var resArray = myArray.filter(x => x.transactionCount != 1); 

在本例,我刪除元素與屬性transactionCount === 1