今天刚好在对一个js对象进行处理,需要在一个json里面,只保留一个键字段做处理,当然写法有很多种,这里列出我的思考过程;
举例:
var kvArray = [{a: 1, b: 10},
{c: 2, b: 20},
{d: 3, c: 30}];
//初级写法 一开始我最初的想法
var reformattedArray = kvArray.map (function(obj){
var robj={};
if (obj.b) {
robj['b'] = obj.b;
return robj;
}
});
输出的结果为:
> Array [Object { b: 10 }, Object { b: 20 }, undefined]
基本达到要求,但是还需要再次处理,去掉undefined,比较麻烦,去查了一下文档,找到 flatMap ,尝试:
//中级写法 flatMap允许对item进行增减
var reformattedArray = kvArray.flatMap (function(obj){
var robj={};
if (obj.b)
return {b:obj.b};
else
return [];
});
输出结果:
> Array [Object { b: 10 }, Object { b: 20 }]
虽然结果符合预期但是很明显代码过长,if判断很明显可以用三元运算代替,再次改进:
//资深写法 到这一步就比较满意了,一行代码解决。
var reformattedArray = kvArray.flatMap((obj)=> (
obj.b ? {b:obj.b} : []
));
输出结果和上一步是一致的。