如何使用 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 });
我有一个对象 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 });