如何使用 JavaScript 在一行中解构和重新分配

How to destructure and reassign in one line using JavaScript

我有一个对象 adData,我需要提取它的一些属性,向提取的对象添加更多属性并将该对象作为参数传递。我可以使用:

const params = {}; 
params.id = adData.id;  
params.status = adData.status; 
params.frequency = adData.frequency; 
params.user = getLoggedInUser(); 
callAnotherFunction(params)

我可以在一行中对新对象进行销毁和重新分配吗?类似于:

const params = {id, status, frequency} = adData; 
params.user = getLoggedInUser(); 

const params = {id, status, frequency, getLoggedInUser(): user} = adData; 

现在这两种语法都是错误的,但是有没有其他方法可以使用解构来做到这一点,而不用一个一个地提取属性

如果您知道对象 有哪些属性,并且没有那么多,您可以列出它们并使用 rest 语法将其他属性收集到一个对象中:

const { unwantedProp, ...params) = adData;
// use params

否则,没有任何非常简单的语法可以满足您的需求,尽管您可以

const params = Object.fromEntries(
  Object.entries(adData).filter(([key]) => 
    ['id', 'status', 'frequency'].includes(key)
  )
);

我们可以在一行中使用解构和箭头函数。

const getLoggedInUser = () => "foo";
const adData = {
  id: 123,
  status: "active",
  frequency: "less",
  bar: 4,
};

const params = (({ id, status, frequency }, user = getLoggedInUser()) => ({
  id,
  status,
  frequency,
  user,
}))(adData);

console.log({ params });