【问题标题】:Generate new random value if value is in array如果值在数组中,则生成新的随机值
【发布时间】:2016-11-26 15:21:46
【问题描述】:

我有一种情况,我正在使用量角器单击页面上的随机链接。 (有很多)。我有一个我不想点击的链接数组,所以我想知道我的随机链接何时在该数组中并生成一个新的随机链接。

这是我点击页面上随机链接的工作代码

var noClickArray = ['link2', 'link3']; // array much bigger than this
var parent = this;

function() {
  var links = element.all(by.css('.links'));
  return links.count().then(function(count) {
    var randomLink = links.get(Math.floor(Math.random() * count));
    randomLink.getText().then(function(text) {
      parent.selectedLink = text; // used in a different function
      var containsLink = _.includes(noClickArray, text);
    });
    return randomLink.click();
  });
}

我正在使用 lodash 来查找 randomLink 文本是否在 noClickArray 中,但我不知道如何继续生成随机值,直到数组中不存在该值。我怎样才能做到这一点?

【问题讨论】:

  • 在可选链接上有一个单独的选择器不是更好吗?例如.clickableLinks,这样你就不需要遍历或过滤整个列表来检查它是否有效。
  • 或者使用链接为键的对象,这样您就可以查看链接/键是否在对象中。

标签: javascript arrays random protractor


【解决方案1】:

我认为你把问题复杂化了。 我会过滤掉你不想点击的链接,事先使用filter()

function() {
  var links = element.all(by.css('.links'));
  links = links.filter(function (link) {
      return link.getText().then(function(text) {
          return !_.includes(noClickArray, text);
      });
  });

  return links.count().then(function(count) {
    var randomLink = links.get(Math.floor(Math.random() * count));
    return randomLink.click();
  });
}

【讨论】:

  • 我通常倾向于让事情变得更复杂 :) 这看起来是一个非常干净的解决方案。谢谢!
【解决方案2】:

您可以简单地使用递归调用,直到获得非黑名单链接。 这样,您将避免为所有链接获取文本的成本:

function() {
  return element.all(by.css('.links')).then(function clickRandom(links) {

    // remove a random link from the array of links
    var link = links.splice(Math.floor(Math.random() * links.length), 1)[0];

    return link && link.getText().then(function(text) {
      if(noClickArray.indexOf(text) === -1) {  // if not black listed
        return link.click();  // click link
      }
      return clickRandom(links); // try again
    });

  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多