首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将每个函数应用于forEach javascript

将每个函数应用于forEach javascript
EN

Stack Overflow用户
提问于 2021-02-03 18:13:32
回答 2查看 48关注 0票数 0

这是我的对象选项卡:

代码语言:javascript
运行
复制
tabs: [
    {
      visible: true,
      title: 'tab 0',
      products: [{id:1, send: true, delivered: true}, {id:1, send: true, delivered: true}],
    },
    {
      visible: true,
      title: 'tab 1',
      products: [{id:11, send: true, delivered: false}, {id:21, send: true, delivered: true}],
    }
  ],
代码语言:javascript
运行
复制
const allDerivered = (product) => product.delivered;
代码语言:javascript
运行
复制
options.tabs.forEach(function (projectProducts){
   if (projectProducts.products.every(allDerivered)){
       statusTabs = 'DELIVERED';
  }
 });

与第一个products选项卡一样,它也是allDerivered,它不会遍历所有的tabs对象。如何将allDerivered函数应用于所有选项卡?

EN

Stack Overflow用户

发布于 2021-02-03 18:23:25

我猜想,如果中的所有产品都已交付,而中的任何产品<>E29>选项卡未交付,则您希望将设置为"DELIVERED"。如果是这样的话,你可以用几种方法来实现。

您可以使用嵌套的every调用:

代码语言:javascript
运行
复制
if (options.tabs.every(({products}) => products.every(({delivered}) => delivered)) {
    statusTabs = "DELIVERED";
}

或具有标签和定向break的嵌套循环

代码语言:javascript
运行
复制
let allDelivered = true;
outer: for (const {products} of options.tabs) {
    for (const {delivered} of products) {
        if (!delivered) {
            allDelivered = false;
            break outer;
        }
    }
}
if (allDelivered) {
    statusTabs = "DELIVERED";
}

如果你在错误的情况下也赋值给statusTabs,这就不那么麻烦了:

代码语言:javascript
运行
复制
statusTabs = "DELIVERED";
outer: for (const {products} of options.tabs) {
    for (const {delivered} of products) {
        if (!delivered) {
            statusTabs = "UNDELIVERED";
            break outer;
        }
    }
}

我将在接下来的回答中做这个假设。

我在上面没有使用allDelivered,因为名称与函数的功能不匹配(它只检查one产品是否已交付,而不是所有产品是否都已交付),而且函数所做的只是对属性值的一次检查,这一点在内联完成时同样清晰。但是如果你想要一个可重用的函数来做这个检查,你可以有一个:

代码语言:javascript
运行
复制
const isDelivered = ({delivered}) => delivered;

那么上面的两个代码块将是:

代码语言:javascript
运行
复制
if (options.tabs.every(({products}) => products.every(isDelivered)) {
    statusTabs = "DELIVERED";
}

或具有标签和定向break的嵌套循环

代码语言:javascript
运行
复制
statusTabs = "DELIVERED";
outer: for (const {products} of options.tabs) {
    for (const product of products) {
        if (isDelivered(product)) {
            statusTabs = "UNDELIVERED";
            break outer;
        }
    }
}

您可以更进一步,为选项卡提供一个allProductsDelivered函数:

代码语言:javascript
运行
复制
const allProductsDelivered = ({products}) => products.every(isDelivered);

则嵌套的every将为:

代码语言:javascript
运行
复制
if (options.tabs.every(allProductsDelivered)) {
    statusTabs = "DELIVERED";
}

循环版本为:

代码语言:javascript
运行
复制
statusTabs = "DELIVERED";
for (const {products} of options.tabs) {
    if (!allProductsDelivered(tab)) {
        statusTabs = "UNDELIVERED";
        break;
    }
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66025393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档