如何对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);
});
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);
});