Es6实现从一个对象取部分属性给另一个对象

1,293次阅读
没有评论

假如有一个js对象:

{
            "menu_id": 4,
            "parent_id": 0,
            "title": "管理员",
            "name": "admin",
            "alias": "",
            "icon": "table",
            "remark": "管理员操作",
            "module": "admin",
            "type": 0,
            "url": "/admin/AdminGroup",
            "params": "",
            "target": "_self",
            "component_path": "",
            "is_navi": 1,
            "sort": 50,
            "status": 1,
            "children_total": 4,
            "level": 0
        },

要从中取出"title","name","icon","url"组成一个新的对象,有没有比较快捷的方法?

1、使用比较早期的方法。

var arr = ["menu_id","title","icon","url"];
function pick(obj,arr){
	var result ={};
	for(var i=0;i<arr.length;i++)
	{
      let field = arr[i];
      for(var key in obj){
        if(field == key){
          result[field] = obj[key];
          break;
        }
      }
	}
	return result;
}
result = pick(obj,arr);
console.log(result)

2、使用数组方法

var arr = ["menu_id","title","icon","url"];
var result2 = {};
arr.forEach((val, index)=> {
        if (val in obj) { result2[val] = obj[val]; }
    });

console.log(result2)

3、直接使用reduce方法累计

var arr = ["menu_id","title","icon","url"];
var result3 = {};
arr.reduce((iter, val) => {
  if(val in obj) {
    result3[val] = obj[val];
  }
  return result3;
}, {});
console.log(result3)

4、如果要排除的元素比较少,可以直接使用解构

let {parent_id,name,alias,remark,...result4}=obj
console.log(result4);

朋友们,你们还有别的好方法没,你们认为哪种比较好?

正文完
 

公众号