Javascript 通过对象的键数组来分解对象

Javascript 通过对象的键数组来分解对象,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我们有一个像这样的物体: let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"} 以及它的一些键的数组: let arr_of_keys = ["a", "d", "e"] 是否可以使用数组中的预定义键来分解对象,如下所示: let {...arr_of_keys} = obj; 最终以以下方式结束: a=“约翰”,d=“约瑟夫”,e=“罗杰” 您需要一个如下所示的简单方法: var result =

假设我们有一个像这样的物体:

let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}
以及它的一些键的数组:

let arr_of_keys = ["a", "d", "e"]
是否可以使用数组中的预定义键来分解对象,如下所示:

let {...arr_of_keys} = obj;
最终以以下方式结束:

a=“约翰”,d=“约瑟夫”,e=“罗杰”

您需要一个如下所示的简单方法:

var result = arr_of_keys.reduce(function(o,item){

    if(obj.hasOwnProperty(item)){
        o[item] = obj[item]; 
    }

  return o;
}, {});
下面是一个例子:

让obj={a:John,b:Sarah,c:Lara,d:Joseph,e:Roger}
让键的排列=[“a”,“d”,“e”,“f”];
var result=arr\u of_key.reduce(函数(o,项){
if(对象hasOwnProperty(项目)){
o[项目]=对象[项目];
}
返回o;
}, {});

console.log(result)
这里是针对所提供问题的一个可能的帮助函数。为了节省资源,我添加了一个集合转换来删除可能的重复。还以控制台错误消息的形式添加了简单的错误处理

const obj={a:“约翰”,b:“萨拉”,c:“劳拉”,d:“约瑟夫”,e:“罗杰”}
键的常数=[“a”、“d”、“e”];
const customObjectDestructurer=(arrayOfDesiredPropKeys,对象)=>{
const setOfDesiredPropKeys=新集合(arrayOfDesiredPropKeys);
常量filteredObject=[…一组DesiredPropKeys].reduce(
(filteredObject,desiredPropKey)=>{
if(object.hasOwnProperty(desiredPropKey)){
filteredObject[desiredPropKey]=对象[desiredPropKey];
}否则{
控制台错误(`
给定的${desiredPropKey}在${object}对象中不存在。
`);
}
返回过滤器对象;
}, {});
返回过滤器对象;
}
const desiredKeys=CustomObjectDestructurer(按键排列,obj);

console.log(所需密钥)否,因为这将意味着动态变量名,这相当于一种代码味道。(另外,
a
已经定义)我猜你的意思是
让arr\u of_key=['a','d','e']
?你所拥有的是一系列对某些事物的引用。@Andy是的,我的不好,编辑过,感谢你的洞察力,完全错过了我发现的最接近的东西,它有点不适合,因为它基本上过滤了一个对象。OP说解构将创建不同的变量。@evolutionxbox“它有点不”不是一个有效的理由。仅仅因为一个问题的措辞说明了一些事情,并不意味着它就是要走的路。此外,如果有两个数组要处理,则需要过滤对象,其中一个数组中的值取决于结果-因此,在某个时候,不管结果如何,都会进行过滤。在我的回答中,没有必要解构一个对象。我知道。我用“kinda”这个词就是为了这个原因。我应该声明我同意你的推理,并且提供的解决方案比OP要求的要好。