繁体   English   中英

根据对象键和属性动态创建字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM