【问题标题】:JavaScript - Splitting Multiple Return ValuesJavaScript - 拆分多个返回值
【发布时间】:2018-06-28 02:57:25
【问题描述】:

我正在为搜索构建过滤器。之前一切正常,因为我们一次只允许 1 个过滤器。所以我会得到这样的回报:

var returnVal = "&filterName=filterProperty"
var filterFields = returnVal.split(['=']);
var filterCategory = filterFields[0];
var filterCatSplit = filterCategory.substr(1);
var filterTitle = filterFields[1];

<h4>filter title</h4>
<ul>
    <li>filter one</li>
</ul>

我会得到 returnVal 并将其拆分为 '='

现在我们将允许多个值,但我不知道如何将它们全部放在页面上的漂亮列表中。现在,returnVal 可以如下所示:

var returnVal = "&sizeFilterName=filterProperty,filterPropery&colorFilterName=filterProperty,filterProperty"

我现在需要它像这样(或类似的东西)返回

<h4>Size Filter Name</h4>
<ul>
    <li>Size Filter One</li>
    <li>Size Filter Two etc</li>
</ul>

<h4>Color Filter Name</h4>
<ul>
    <li>Color Filter One</li>
    <li>Color Filter Two etc</li>
</ul>

我以前从未需要拆分和切片这么多变体。我有点失落。我希望这足以让我了解我想要做什么。

谢谢!

【问题讨论】:

  • 您是否尝试过拆分&amp;,然后将列表中的每个项目拆分为=,?然后使用属性名称来决定每个值列表的去向?
  • 我想过,但这似乎是一种低效的方法。喜欢它的“漫长的道路”而不是正确的道路

标签: javascript jquery arrays split slice


【解决方案1】:

您可以将returnVal 传递给URLSearchParams() 然后.split() 的值由"," 使用返回的数组执行任务

let returnVal = "&sizeFilterName=filterProperty,filterPropery&colorFilterName=filterProperty,filterProperty";
let params = Array.from([...new URLSearchParams(returnVal)]
             , ([key, value]) => [key, value.split(",").filter(Boolean)]);
// do stuff with `params`
params.forEach(([key, value]) => 
  document.body.insertAdjacentHTML("beforeend", `<h4>Size ${key}</h4>
<ul>
    ${value.map(prop => `<li>Color ${prop}</li>`).join("")}
</ul>`)
);

【讨论】:

  • 这看起来可行。我离开我的比赛去尝试,但我一到那里我会的。谢谢!
  • 刚刚注意到Color filterProperty 正在为两个列表运行。一个应该是“Size filterProperty”,另一个应该是“Color filterProperty”——我会尝试解决这个问题
  • @rebel84 仅在您提及时才注意到。最初不包括字符串“Color”。您应该能够包含并使用.map() 的索引参数来检查“大小”或“颜色”是否是在prop 之前的元素处设置的文本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多