检查数组中是否包含任何元素

时间:2017-10-24 21:54:46

标签: javascript

{
    html: `
      <article>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <img src="http://fillmurray.com/200/300" />

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Quesadilla. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <img src="http://fillmurray.com/200/300" />

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Praesent libero. Praesent libero. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, luctu.</p>
      </article>`,
    blacklist: ['quesadilla', 'pineapple', 'eel'],
  }

鉴于上面的JSON对象,我只想检查blacklist

中是否包含<article>个字词

我的问题是,为了简洁起见,我可以将数组传递给indexOf测试。

if( html.indexOf([array, of, items]) >= 0){
    // Do something
}

这是正确的方法吗?我真的需要循环文本吗?

4 个答案:

答案 0 :(得分:1)

您可以通过检查字符串上的indexOf并逐个迭代黑名单元素来检查字符串是否包含给定的单词:

function isBlacklisted(text, blacklist) {
  let isBlacklisted

  for (let blacklistItem of blacklist) {
    if (text.indexOf(blacklistItem) !== -1) {
      blacklisted = true;
    }
  }

  return blacklisted;
}

但是,您必须迭代黑名单中的元素才能获得结果。

indexOf返回数组中元素的位置(String也支持这个,因为它是可迭代的)。

如果元素不存在,则返回-1。因此,任何不同于-1的值都意味着黑名单中的一个单词出现在字符串中。

两个建议的优化(如果您喜欢使用代码):

  • 而不是使用此for .. of循环 - 使用array.reduce:)
  • 而不是!== -1尝试使用代字号(~)运算符indexOf

如果您在编码时玩得开心,请尝试两种方法,它会教您使用编程结构!

参考文献: https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/ https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Array/Reduce

答案 1 :(得分:0)

您可以使用Array.prototype.some()函数来避免显式循环:

    public static List<T> ExtractXmltoClassList<T>(HttpResponseMessage http, string elementName) where T : new()
    {
        var ctorType = typeof(T);
        var classList = new List<T>();

        var doc = JsonConvert.DeserializeXmlNode(http.Content.ReadAsStringAsync().Result, "root");

        var xdoc = XDocument.Parse(doc.InnerXml);

        var count = xdoc.Descendants(elementName).Count();

        for (var x = 0; x < count; x++) //Itterate the number of times the tag was found (= number of elements)
        {
            var newClass = new T();

            foreach (var prop in ctorType.GetProperties())
            {
                var tags = xdoc.Descendants(elementName).Select(node => node.Element(prop.Name)).ToList();
                if (tags.Count <= 0 || tags[x].Value.Trim() == "")
                    continue;

                if (prop.PropertyType == typeof(int))
                    prop.SetValue(newClass, Utility.ToInt(tags[x].Value));
                else if (prop.PropertyType == typeof(long))
                    prop.SetValue(newClass, Utility.ToLong(tags[x].Value));
                else if (prop.PropertyType == typeof(double))
                    prop.SetValue(newClass, Utility.ToDouble(tags[x].Value));
                else if (prop.PropertyType == typeof(float))
                    prop.SetValue(newClass, Utility.ToFloat(tags[x].Value));
                else if (prop.PropertyType == typeof(bool))
                    prop.SetValue(newClass, Utility.ToBool(tags[x].Value));
                else if (prop.PropertyType == typeof(string))
                    prop.SetValue(newClass, tags[x].Value);
                else if (prop.PropertyType == typeof(DateTime))
                    prop.SetValue(newClass, Utility.ToDateTime(tags[x].Value));
                else if (prop.PropertyType == typeof(Guid))
                    prop.SetValue(newClass, Utility.ToGuid(tags[x].Value));
            }

            classList.Add(newClass);
        }
        return classList;
    }

如果任何元素在提供的回调函数中返回true,则some()函数返回true。

答案 2 :(得分:0)

为什么不使用正则表达式?

下面的代码将使用用户提供的haystack

中定义的针捕获匹配项
// A configurable array of needles
const needles = ["word1", "word2", "word3"];

// Haystack from web form element
let haystack = getElementById("textbox").value;

// Convert needles array to needle (pattern)
let needle = new RegExp(needles.join("|"));

// Set matches array to the values of the matched needle in the user defined haystack
let matches = needle.exec(haystack);

答案 3 :(得分:-1)

我认为这样做非常容易。

var a = "some text"
var b = "pineapple amazing"
var blacklist = ['quesadilla', 'pineapple', 'eel']
var regexOfLord = new RegExp(blacklist.join('|'))

a.match(regexOfLord)
=> null

b.match(regexOfLord)
=> [ 'pineapple', index: 0, input: 'pineapple amazing' ]