我正在使用查询字符串(https://www.npmjs.com/package/qs)来解析URL中的参数,如下所示:
http://www.website.com/?filter="bags"&filter="shirts"
但是,如果我没有过滤器或只有一个过滤器,它将返回一个字符串或未定义:
http://www.website.com/?filter="bags" // returns 'bags'
http://www.website.com/ // returns undefined
原因是我需要将此结果输入使用数组的函数/方法中。
我想到的一种解决方案是根据返回的条件来创建条件:
if (typeof query == 'string') {
query = [query];
} else if (query == undefined) {
query = [];
}
但这似乎不是最佳的。想知道结果是否一直都是数组。
答案 0 :(得分:1)
我认为您无能为力。但是,您可以使用三元运算符来减少一些代码。如果query
没有任何内容,则以下代码将返回空数组:
if(!Array.isArray(query))
query = !!query ? [query] : [];
答案 1 :(得分:1)
原因是我需要将此结果输入函数/方法中 使用数组。
我认为更好的解决方案是将功能/方法的默认参数添加为数组,而不是检查查询是array
还是undefined
,
示例
function yourFunction(query = []){
return query;
}
答案 2 :(得分:0)
通过这种方式,if
条件检查查询是否未定义。
if (query) {
query = [query];
} else {
query = [];
}
答案 3 :(得分:0)
您可以执行以下操作:
var filter = [];
if(query) {
filter.push(query);
}
这样,过滤器将始终是一个数组,并包含查询过滤器(如果提供)。这种模式并不罕见。
答案 4 :(得分:0)
我认为您可以做到:
query = !!query ? Array.isArray(query) ? query : [query] : [];
或:
if(!!query) {
if(!Array.isArray(query)) {
query = [query];
}
} else {
query = [];
}
答案 5 :(得分:0)
我将初始化一个空查询。假设您的查询以状态存储,然后:
<div class="container">
<div class="row">
<% if @products_search.blank? %>
<%unless @products.blank?%>
<% @products.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<%else%>
<h1>No products found!</h1>
<%end%>
<% elsif @products_search.present? %>
<% @products_search.each do |product| %>
<div class="col-sm-8 col-sm-offset-2">
<%= product.name %><br>
<%= product.description %><br>
<%= humanized_money_with_symbol(product.price)%><br>
<%= link_to "Show Product", product_path(product) %>
</div>
<%end%>
<% else %>
<h1>No products found!</h1>
<% end %>
</div>
</div>
或者,只需在状态为空数组的情况下初始化查询即可:
const { query } = this.state || { query: [] }
现在,仅当查询在处理程序中具有值时,才应设置查询状态:
state = {
query: [] // rather than ''
}
答案 6 :(得分:0)
除了许多现有答案之外,另一个选项是您可以始终将其包装然后过滤掉undefined
:
let str = 'str';
console.log( [str].filter(v=>v!==undefined) ) // [ 'str' ]
let undf;
console.log( [undf].filter(v=>v!==undefined) ) // [ ]
// Example: filter out undefined
query = [query].filter(v=>v!==undefined)
// Example: passing in a Boolean constructor, since non-empty strings are truthy
query = [query].filter(Boolean)