javascript从结果中删除NULL

时间:2018-05-15 18:28:59

标签: javascript arrays

为了我,我无法得到过滤器(.filter(function(d,i){return d}))来消除“undefined”或“0”在这个数组上工作。

该脚本在Applescript applet中运行,并应将所有生成的url作为字符串返回。

var x = Array.prototype.slice.call(document.querySelectorAll(".product_card"))
    .map(function(d,i){
        var title = d.querySelector(".product_card__title"),
            link =  d.querySelector("a");
            console.log(title);
            console.log(link);
        if(title && link && /Rocker/gi.test(title.textContent)){
            return link.href
        }
    })

 document.getElementById("result").textContent = JSON.stringify(x);
<div class="product_card powersearch__product_card">
     <a href="/shop/XYZ" class="js-search-product-link">
  <div class="product_card__image" style="background-image:url(https://image.jpg);"></div>
  <div class="product_card__title">some rocker</div>
  <div class="product_card__meta">€14</div></a></div>
  <br>
  <div class="product_card powersearch__product_card">
     <a href="/shop/ZXY" class="js-search-product-link">
  <div class="product_card__image" style="background-image:url(https://image.jpg);"></div>
  <div class="product_card__title">returns undefined</div>
  <div class="product_card__meta">€14</div></a></div>
  <br>
  <div id="result">

任何高度帮助的帮助

1 个答案:

答案 0 :(得分:1)

首先,您可以通过使您的初始qSA选择更加具体来摆脱一些内部DOM选择:".product_card a .product_card__title"

然后,您可以使用.filter()返回检查每个元素.includes() "rocker"文本的结果。在映射.href之前执行此

最后,.map()这些结果会导致每个.href的{​​{1}},因为我们直接选择了带有文字的孩子。

&#13;
&#13;
.parentNode
&#13;
var x = Array.prototype.slice.call(document.querySelectorAll(".product_card a .product_card__title"))
  .filter(function(d) {
    return d.textContent.toLowerCase().includes("rocker")
  })
  .map(function(d) { return d.parentNode.href });

document.getElementById("result").textContent = JSON.stringify(x);
&#13;
&#13;
&#13;

当然,现代语法更清晰。

<div class="product_card powersearch__product_card">
  <a href="/shop/XYZ" class="js-search-product-link">
    <div class="product_card__image" style="background-image:url(https://image.jpg);"></div>
    <div class="product_card__title">some rocker</div>
    <div class="product_card__meta">€14</div>
  </a>
</div>
<br>
<div class="product_card powersearch__product_card">
  <a href="/shop/ZXY" class="js-search-product-link">
    <div class="product_card__image" style="background-image:url(https://image.jpg);"></div>
    <div class="product_card__title">returns undefined</div>
    <div class="product_card__meta">€14</div>
  </a>
</div>
<br>
<div id="result">