我有一个函数,它接受浏览器类型作为参数中的数组作为参数。我想为用户是否需要任何浏览器返回错误消息。为此,我使用了一个名为allTypeNumber
的变量。我用于在下面的代码中返回错误。
我想检查每个数组的长度,如果它们都是0
,我知道没有请求任何浏览器,但是如果不使用变量就混淆了如何做到这一点。
async retrievePartners (capabilities) {
const appropriatePartners = { chrome: [], firefox: [], safari: [], ie: [] }
const partners = await this.getAllPartners()
let allTypeNumber = 0
// first check if there is available appropriate Partners
Object.keys(capabilities.type).forEach(key => {
let typeNumber = parseInt(capabilities.type[key])
allTypeNumber = allTypeNumber + typeNumber
for (let i = 0; i < typeNumber; i++) {
partners.forEach((partner, i) => {
if (
key === partner.value.type &&
partner.value.isAvailable &&
appropriatePartners[key].length < typeNumber
) {
appropriatePartners[key].push(partner)
}
})
if (appropriatePartners[key].length < typeNumber) {
throw new Error(
'Sorry there are no appropriate Partners for this session'
)
}
}
})
if (allTypeNumber === 0) {
throw new Error('Please mention at least 1 type of browser !')
我用这个参数调用它
const capabilities = { type: { chrome: 1 } }
答案 0 :(得分:2)
检查数组的每个值是否为某种东西的简洁方法是使用every()
(或其反向,some()
)。 every()
将遍历数组中的每个元素并继续,只要它不断返回truthy值。 some()
只要不断变得虚假就会继续前进。他们都会根据上次返回值返回true
或false
。
或者,如果您需要计数(而不仅仅知道是否至少有一个),您可以使用reduce()
来创建总和。 reduce()
遍历带有累加器的数组,适用于从数据数组中创建奇异值。
此外,如果您需要从object
获取值,则使用Object.entries()
或Object.values()
可能比使用键更清晰。 Object.entries()
为您提供了一个数组数组,其中每个数组都是[key, value]
。 Object.values()
只会为您提供一系列值。
最后,为确保合作伙伴合适,您可以使用partner.filter()
仅过滤好的合作伙伴和不良合作伙伴。
将其中一些放在一起,您可以轻松地执行以下操作:
const total = Object.entries(capabilties.type).reduce(([key, type]) => {
typeNumber = parseInt(type);
const good = partners.filter(partner => key === partner.value.type && partner.value.isAvailable && appropriatePartners[key] < typeNumber);
appropriatePartners[key].concat(good);
if (appropriatePartners[key].length < typeNumber) {
throw new Error('No appropriate partners');
}
return typeNumber;
}, 0);
if (total === 0) {
throw new Error('Please mention at least 1 type of browser');
}
当然,这不是唯一合适的。我不知道你的逻辑中哪些是简单的,所以你可以跟踪它们,并且它们背后有商业逻辑。使用我提到的一些功能,如果你不需要跟踪某些事情,你可以进一步减少它。