![](/img/trans.png)
[英]How to create properties to and object dynamically based on another object in JavaScript?
[英]Dynamically create string based on object keys and properties
我試圖根據三個表單輸入動態創建一個查詢字符串。 只應將使用的輸入添加到字符串中。
為此,我使用了以下內容:
let filter = { CustomerName: "Me", AccountNumber: "", "Author/Title": "You" }
const result = Object.entries(filter).map(([key, value]) => {
if (value) {
// if input was used, return given string
console.log(`${key} eq '${value}'`)
return `${key} eq '${value}'`
}
})
console.log(result); // output is ["CustomerName eq 'Me'", undefined, "Author/Title eq 'You'"]
let filterStr = ''
result.forEach(element => {
if (element) {
filterStr += ` and ${element}`
}
});
console.log(filterStr.replace(" and", "")) // output is "CustomerName eq 'Me' and Author/Title eq 'You'"
最終輸出是正確的,但這似乎是獲得最終結果的多余方法。
如何清理它以減少冗余並提高可讀性?
試試下面的代碼,如果這是你正在尋找的。
let filter = { CustomerName: "Me", AccountNumber: "", "Author/Title": "You" }
let str = Object.keys(filter)
.filter(key => filter[key])
.map(key => `${key} eq '${filter[key]}'`)
.join(' and ');
console.log(str);
您可以先過濾,然后獲取映射的字符串並將結果與最后兩個值之間的一個和at 連接起來。
const nice = array => array.concat(array.splice(-2, 2).join(' and ')).join(', '); var filter = { foo: 'bar', CustomerName: "Me", AccountNumber: "", "Author/Title": "You" }, result = Object .entries(filter) .filter(([, value]) => value) .map(([key, value]) => `${key} eq '${value}'`); console.log(nice(result));
let filter = { CustomerName: "Me", AccountNumber: "", "Author/Title": "You"} let formattedObj = Object.keys(filter).filter(key => filter[key]).map(key => `${key} eq \\'${filter[key]}\\'`) console.log(formattedObj.join(' and '))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.