我這里有這個笨重的代碼,希望有任何方法可以縮短它。順便說一句,“req.query”是我來自 nodejs express 服務器的查詢物件。
const q = req.query
User.insertOne({
firstName: q.firstName,
lastName: q.lastName,
bestFriend: q.bestFriend,
hobbies: q.hobbies,
address: {
street: q.address.street,
number: q.address.number,
plz: q.address.plz,
city: q.address.city,
country: q.address.country,
},
contact: {
telephone: q.contact.telephone,
email: q.contact.email,
},
})
如您所見,我的第一個解決方案是用 q 替換 req.query,但這似乎還不夠。
也許你可以用“with”陳述句來做到這一點,但我以前沒有使用過它,而且我聽說你不應該實作它(不知道為什么......)。
uj5u.com熱心網友回復:
通過閱讀您的標題,我了解到您想使用 ES6 物件屬性簡寫。要在您當前的設定中實作這一點,您還需要使用物件解構,這是代碼:
//Object destructuring:
const { firstName, lastName, bestFriend, hobbies } = req.query;
const { street, number, plz, city, country } = req.query.address;
const { telephone, email } = req.query.contact;
//Using the ES6 object property shorthand:
User.insertOne({
firstName,
lastName,
bestFriend,
hobbies,
address: {
street,
number,
plz,
city,
country,
},
contact: {
telephone,
email,
},
})
uj5u.com熱心網友回復:
只要屬性名稱相互匹配,就可以直接在javascript中賦值,相關屬性就會被映射。
const q = req.query
User.insertOne(q);
如果屬性不匹配,請使用 ES6 中的擴展運算子 ( ... ),這在映射物件時很方便。
uj5u.com熱心網友回復:
您可以使用 lodash 庫并使用 pick 方法。您只需要從 req.query 中指定所需欄位的名稱,它就會回傳一個包含您可以使用的值的物件。
const _ = require("lodash");
User.insertOne(_.pick(req.query, [
"firstName",
"lastName",
"bestFriend",
"hobbies",
"address.street",
"address.number",
"address.plz",
"address.city",
"address.country",
"contact.telephone",
"contact.email"
]))
uj5u.com熱心網友回復:
如果 OP 的任務是將查詢資料的一個子集傳遞給方法(但實際上不僅僅是為了那個),那么 OP 可能會查看解構賦值語法、擴展語法以及其余引數句法。
const req = {
query: {
foo: 'Foo',
bar: 'Bar',
firstName: 'Anni',
lastName: 'Smith',
bestFriend: 'Jane Doe',
hobbies: '',
address: {
street: 'Any Lane',
number: 42,
plz: '1-234-456',
city: 'Some City',
country: 'Motherland',
},
contact: {
telephone: '9-87-654-321',
email: '[email protected]',
},
more_not_needed_data: {
baz: 'Baz',
biz: 'Biz',
},
},
};
const userDataFromRest =
(({ foo, bar, more_not_needed_data, ...data }) => data)(req.query);
const explicitUserData = (
({
firstName, lastName, bestFriend, hobbies, address, contact,
}) => ({
firstName, lastName, bestFriend, hobbies, address, contact,
})
)(req.query);
/*
User
.insertOne((({ foo, bar, 'more not needed data', ...data }) => data)(req.query));
User
.insertOne((
({
firstName, lastName, bestFriend, hobbies, address, contact,
}) => ({
firstName, lastName, bestFriend, hobbies, address, contact,
})
)(req.query));
*/
console.log({
query: req.query,
userDataFromRest,
explicitUserData,
});
.as-console-wrapper { min-height: 100%!important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530155.html
