Javascript Rest操作符-动态删除元素以获得Rest

Javascript Rest操作符-动态删除元素以获得Rest,javascript,Javascript,我想知道是否有一个选项可以达到如下效果 const x = { a:1, b:2, c:3, d:4, e:5 } const y = ['a', 'b']; 要仅获取c、d、e,我可以轻松使用rest运算符: const { a, b, ...rest} = x; 和rest包含3个键 下面的代码不起作用-但是有没有办法通过rest操作符来实现 const { ...y, ...rest} = x; 在rest中设置这3个键 所以如果i会定义 const y = [

我想知道是否有一个选项可以达到如下效果

const x = {
  a:1,
  b:2,
  c:3,
  d:4,
  e:5
}

const y = ['a', 'b'];
要仅获取
c、d、e
,我可以轻松使用rest运算符:

const { a, b, ...rest} = x;
rest
包含3个键

下面的代码不起作用-但是有没有办法通过rest操作符来实现

const { ...y, ...rest} = x;
rest
中设置这3个键 所以如果
i
会定义

const y = ['a','b','c']

然后我会在
rest

中有两个键,可能没有您想要的那么优雅,但是如果您想要动态获取不在数组中的键,您可以使用:

const x={
答:1,,
b:2,
c:3,
d:4,
e:5
}
常数y=['a','b','c'];
常量rest=Object.keys(x).filter(key=>y.indexOf(key)=-1);
控制台日志(rest)使用,可以执行以下操作:

更新的答案

const x = {
  a:1,
  b:2,
  c:3,
  d:4,
  e:5
}

const y = ['a', 'b', 'c'];

const rest = _.omit(x,y)

console.log(rest);
const x = {
  a:1,
  b:2,
  c:3,
  d:4,
  e:5
}

const y = ['a', 'b', 'c'];

const rest = _.pick(x,_.difference(_.keys(x),y))

console.log(rest);
原始答案

const x = {
  a:1,
  b:2,
  c:3,
  d:4,
  e:5
}

const y = ['a', 'b', 'c'];

const rest = _.omit(x,y)

console.log(rest);
const x = {
  a:1,
  b:2,
  c:3,
  d:4,
  e:5
}

const y = ['a', 'b', 'c'];

const rest = _.pick(x,_.difference(_.keys(x),y))

console.log(rest);
代码说明:

  • 。.keys(x)
    返回
    ['a','b','c','d','e']
  • 差异(['a','b','c','d','e',['a','b','c'])
返回
['d','e']
  • 选择({a:1,b:2,c:3,d:4,e:5},['d','e'])返回
    {d:4,e:5}

  • ES6矿粉镐的更换:

    const x = {
      a:1,
      b:2,
      c:3,
      d:4,
      e:5
    }
    const y = ['a', 'b', 'c'];
    const out = Object.assign({}, ...y.map(key => ({ [key]: x[key] })))
    

    当前ES6部分实施了
    .omit
    (为了更好地衡量,还实施了
    .pick
    ):

    const data={a:1,b:2,c:3,d:4,e:5}
    常量somekey=['a','b','c']
    常量拾取=键=>o=>
    减少(
    (acc,key)=>Object.assign(acc,{[key]:o[key]}),
    {}
    )
    console.log(
    `选择[${someKeys}]:`,
    拾取(某些关键点)(数据)
    )
    //->{a:1,b:2,c:3}
    const omit=keys=>o=>
    拾取(Object.keys(o).filter(k=>!(keys.includes(k)))(o)
    console.log(
    `省略[${someKeys}]:`,
    省略(某些键)(数据)
    )
    //->{d:4,e:5}
    const fromEntries=entries=>
    减少(
    (acc[k,v])=>Object.assign(acc,{[k]:v}),
    {}
    )
    console.log(
    “fromEntries:”,
    fromEntries(Object.entries(数据))
    )
    
    //->{a:1,b:2,c:3,d:4,e:5}
    您可以使用
    Object.keys()
    手动迭代键。这里的目标是什么?这听起来像是一个.wouldn.wouldn't更容易使用u.omit here?
    out
    在这里包含a、b、c键-而不是d键,这是一个提取第一个变量的解决方案(类似于开始时的rest排列)。Tex增加了捕获这两个案例的答案。