繁体   English   中英

es6:隐式数组对象

[英]es6 : covert object to array

我有记录:

 let a =  [{
            "resource" : "user",

            "permissions" : [ 
                "add", 
                "list", 
                "verify", 
                "add-credit", 
                "deactive", 
                "trash", 
                "edit", 
                "impersonate", 
                "active"
            ]
        }, 
        {
            "resource" : "company",

            "permissions" : [ 
                "list", 
                "verify", 
                "pending", 
                "reject"
            ]
        }];

我想将其转换为:

{"user":[ 
                "add", 
                "list", 
                "verify", 
                "add-credit", 
                "deactive", 
                "trash", 
                "edit", 
                "impersonate", 
                "active"
         ], 
        "company" : [ 
                "list", 
                "verify", 
                "pending", 
                "reject"
            ]
     };

这可以通过自定义函数进行foreach并将结果存储到另一个变量中来完成。

我想要做的就是使用mapfilter或es6中javascript的任何新功能。

我尝试使用map

 a.map(function (res){return res.resource})

使用reduce

var output = a.reduce( ( acc, c ) => {
  acc[ c.resource ] = c.permissions;
  return acc; //return accumulator
} ,{}) // initialize accumulator to {}

说明

  • 使用reduce 迭代并将 累加器 acc 初始化空对象 {}
  • 对于数组a中的每一项c
    • c.resource值( 用户公司 )作为属性分配给acc (累加器),并且该属性的值是c.permissions
    • return 累加器 acc

尽管可以通过使用reducereduce此问题,但这只是为了说明可以通过这种方式完成,如果您不了解reduce工作原理或不想使用reduce ,则可以更好地理解。

 let a = [{ "resource" : "user", "permissions" : [ "add", "list", "verify", "add-credit", "deactive", "trash", "edit", "impersonate", "active" ] }, { "resource" : "company", "permissions" : [ "list", "verify", "pending", "reject" ] }]; var res = {}; a.forEach((obj)=>{ res[obj.resource] = obj.permissions; }); console.log(res); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM