如何同时索引javascript对象上的多个属性

如何同时索引javascript对象上的多个属性,javascript,arrays,object,ecmascript-6,syntax,Javascript,Arrays,Object,Ecmascript 6,Syntax,假设我有一个JavaScript对象,如: var x = { 'one': 1, 'two': 2, 'three': 3 } 然后我有一个数组,其中包含我想从这个对象访问的键 这是我的钥匙: var keys = ['one', 'two']; 现在,当我使用这些键从对象中取出我想要的东西时,它应该是这样的 { 'one': 1, 'two': 2 } 我的伪代码思维想象代码是这样的: var x = { 'one': 1, 'two': 2, 'thr

假设我有一个JavaScript对象,如:

var x = {
  'one': 1,
  'two': 2,
  'three': 3
}
然后我有一个数组,其中包含我想从这个对象访问的键

这是我的钥匙:

var keys = ['one', 'two'];
现在,当我使用这些键从对象中取出我想要的东西时,它应该是这样的

{
  'one': 1,
  'two': 2
}
我的伪代码思维想象代码是这样的:

var x = {
  'one': 1,
  'two': 2,
  'three': 3
}
var keys = ['one', 'two'];
var answer = x[keys];
但我知道这实际上不起作用

在javascript中是否有一种优雅的方法来实现这一点?使用数组索引对象的多个属性

我可以想象一个使用蛮力的for循环版本,但我想知道这是否是我不知道的JavaScript特性


想法?

这需要一些代码,但我认为最接近的方法是使用Object.fromEntries将关键点映射到新对象

变量x={ "一":一,, "二":二,, "三":三 }; 变量键=['1','2']; const newObj=Object.fromEntries keys.mapkey=>[key,x[key]] ;
console.lognewObj 这需要一些代码,但我认为最接近的方法是使用Object.fromEntries将关键点映射到新对象

变量x={ "一":一,, "二":二,, "三":三 }; 变量键=['1','2']; const newObj=Object.fromEntries keys.mapkey=>[key,x[key]] ;
console.lognewObj 我想这就是你想要的

变量x={ "一":一,, "二":二,, "三":三 } 变量键=['1','2']; 设res={}; keys.forEachkey=>{res[key]=x[key]}
console.logres我想这就是你想要的

变量x={ "一":一,, "二":二,, "三":三 } 变量键=['1','2']; 设res={}; keys.forEachkey=>{res[key]=x[key]} 您可以使用console.logres在这样的时间复杂度上获得最高的性能

var x={'one':1,'two':2,'twree':3}; 变量键=['1','2','5']; const result=keys.reduceacc,curr=>curr in x&&acc[curr]=x[curr],acc,{}; console.logresult 您可以使用获得最高的时间复杂度性能,如下所示

var x={'one':1,'two':2,'twree':3}; 变量键=['1','2','5']; const result=keys.reduceacc,curr=>curr in x&&acc[curr]=x[curr],acc,{};

console.logresult;是的,我想这并不是很糟糕,我真的希望学习一些超级疯狂的语法或者一些我以前从未见过的东西。tho hahaI不认为有更简洁的方法。当然,有一些库实现了这一点,但这只是将实现它的代码隐藏在引擎盖下。是的,这就是我假设的。。。这个问题的目的并不是想看到它是这样做的,我只是想看看是否有一些语法我不知道,但我会接受这个答案,然后你必须循环2次?First-keys.map,Second-Object.Fromentries我不认为有更简洁的方法,那怎么办@当然,性能也不错,我想,我真的很想学习一些超级疯狂的语法,或者一些我以前从未见过的东西,但是哈哈,我不认为有更简洁的方法。当然,有一些库实现了这一点,但这只是将实现它的代码隐藏在引擎盖下。是的,这就是我假设的。。。这个问题的目的并不是想看到它是这样做的,我只是想看看是否有一些语法我不知道,但我会接受这个答案,然后你必须循环2次?First-keys.map,Second-Object.Fromentries我不认为有更简洁的方法,那怎么办@某些性能操作,您将map用于its的其他用途:请您解释一下。对不起,我没抓住你是的。基本上,方法创建一个新数组。而您只是使用它来迭代并为res赋值。您应该改用forEach。keys.forEachkey=>{res[key]=x[key]}你说得对。但这有什么大问题吗。我的意思是它会产生任何问题,因为它仍然正常工作,它有副作用。此外,由于要创建一个新的数组,这意味着需要额外的内存空间来执行此操作。这就是我的意思:如果需要,你可以查看上面的内容。快乐编码+1^^!哎呀,你把地图用于its的其他用途:你能解释一下吗。对不起,我没抓住你是的。基本上,方法创建一个新数组。而您只是使用它来迭代并为res赋值。您应该改用forEach。keys.forEachkey=>{res[key]=x[key]}你说得对。但这有什么大问题吗。我的意思是它会产生任何问题,因为它仍然正常工作,它有副作用。此外,由于要创建一个新的数组,这意味着需要额外的内存空间来执行此操作。这就是我的意思:如果需要,你可以查看上面的内容。快乐编码+1^^!这回答了你的问题吗?如果你需要帮助,请告诉我@Alec Donald MatherSmall问题:若键包含某个不在x中的值,那个么结果将把该值设置为undefined,我猜这通常是不需要的。做一个简单的检查可以解决这个问题:keys.reduceacc,curr=>curr in x&&acc[curr]=x[curr],acc,{}是的。这是有道理的。我被绞死了
你和我的朋友在一起。因此,请随意编辑我的文章,使其更一般相应。提前感谢@Som Shekhar MukherjeeHi@SomShekharMukherjee。我刚刚检查了你的更新。为什么在x&&中使用curr而不是x[curr]&&?在性能、浏览器支持和干净代码方面,哪一个是最好的?性能:我想应该差不多,但没有经过测试。支持:完全支持,干净的代码:我想说两者都是干净的,在我看来更可读,当我在x&&something中看到curr时,如果对象上存在该属性,我会读ok,然后执行其余操作。一定要让我知道你的感受,如果你有一些绩效方面的见解。这是否回答了你的问题?如果你需要帮助,请告诉我@Alec Donald MatherSmall问题:若键包含某个不在x中的值,那个么结果将把该值设置为undefined,我猜这通常是不需要的。做一个简单的检查可以解决这个问题:keys.reduceacc,curr=>curr in x&&acc[curr]=x[curr],acc,{}是的。这是有道理的。我要和我的朋友一起吊死你。因此,请随意编辑我的文章,使其更一般相应。提前感谢@Som Shekhar MukherjeeHi@SomShekharMukherjee。我刚刚检查了你的更新。为什么在x&&中使用curr而不是x[curr]&&?在性能、浏览器支持和干净代码方面,哪一个是最好的?性能:我想应该差不多,但没有经过测试。支持:完全支持,干净的代码:我想说两者都是干净的,在我看来更可读,当我在x&&something中看到curr时,如果对象上存在该属性,我会读ok,然后执行其余操作。一定要让我知道你的感受,如果你有一些性能方面的见解。