如何对for循环中的值求和

How to sum the values in for loop

element.all(by.tagName('strong')).count().then(function (number) {
    for (let i = 2; i < number; i=i+3) {
        element.all(by.tagName('strong')).get(i).getText().then(function (text2) {
                var text3 = text2.split(" ");
               var price = text3[1];
                console.log(price);
        });

    }

});

输出: 65000 50000 100000 85000

在这里我想得到所有值的总和。 谁能帮我求出所有值的总和。

您可以使用 .reduce

尝试类似的操作
let sum = element.all(by.tagName('strong')).reduce(function(acc, elem) {
  return elem.getText().then(function(text) {
    var text3 = text2.split(" ");
    var price = text3[1];
    return acc + price;
  });
}, 0);

更新:

.reduce 如果您想跳过特定元素,回调也接受索引。

let sum = element.all(by.tagName('strong')).reduce(function(acc, elem, index) {
  if ((index - 2) % 3 == 0) {
    return acc + 0;
  }
  return elem.getText().then(function(text) {
    var text3 = text2.split(" ");
    var price = text3[1];
    return acc + price;
  });
}, 0);

您需要跟踪一个 total 变量,您可以为要比较的每个元素的文本添加该变量。

您需要将元素的文本转换为数字。 parseFloat() 是一种方法。

使用异步代码(Promises、.then() 等)时,您只能通过将另一个 .then() 链接到承诺链来使用值,以确保值可用。如果您尝试在 .then() 之外记录 total,那么 console.log 将在您的文本总计代码运行之前执行很长时间。

总结一下,这是一个例子,它也消除了额外的元素抓取的需要,因为看起来你可以在集合上使用 .getText()

let total = 0;
element.all(by.tagName('strong')).getText().then(function(strongTags) {
  for (let i = 2; i < strongTags.length; i = i + 3) {
    total += parseFloat(strongTags[i].split(' ')[1]);
  }
  return total;
}).then(function(total) => {
  console.log('The total is', total);
});