2016-08-02 51 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