如何解决将每个函数应用于 forEach javascript
那是我的对象标签:
tabs: [
{
visible: true,title: 'tab 0',products: [{id:1,send: true,delivered: true},{id:1,delivered: true}],},{
visible: true,title: 'tab 1',products: [{id:11,delivered: false},{id:21,}
],
const allDerivered = (product) => product.delivered;
options.tabs.forEach(function (projectProducts){
if (projectProducts.products.every(allDerivered)){
statusTabs = 'DELIVERED';
}
});
就像第一个产品选项卡都是派生的一样,它不会遍历所有选项卡对象。如何将 allDerived 函数应用于所有选项卡?
解决方法
如果所有标签中的所有产品已交付,我猜您想将statusTabs
设置为"DELIVERED"
,而不是如果任何标签中的任何产品未交付。如果是这样,您可以通过多种方式实现。
您可以使用嵌套的 every
调用:
if (options.tabs.every(({products}) => products.every(({delivered}) => delivered)) {
statusTabs = "DELIVERED";
}
或带有标签和有向 break
的嵌套循环:
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";
}
如果您还在 false 情况下分配给 statusTabs
,那就不那么麻烦了:
statusTabs = "DELIVERED";
outer: for (const {products} of options.tabs) {
for (const {delivered} of products) {
if (!delivered) {
statusTabs = "UNDELIVERED";
break outer;
}
}
}
我将对其余的答案做出这个假设。
我没有在上面使用 allDelivered
,因为名称与函数的作用不匹配(它只检查是否有一个产品交付,而不是是否全部交付)并且因为该函数所做的只是对属性值的一次检查,这与内联完成的一样清晰。但是如果你想要一个可重用的函数来做这个检查,你可以有一个:
const isDelivered = ({delivered}) => delivered;
那么上面的两个代码块就是:
if (options.tabs.every(({products}) => products.every(isDelivered)) {
statusTabs = "DELIVERED";
}
或带有标签和有向 break
的嵌套循环:
statusTabs = "DELIVERED";
outer: for (const {products} of options.tabs) {
for (const product of products) {
if (isDelivered(product)) {
statusTabs = "UNDELIVERED";
break outer;
}
}
}
您可以更进一步,为标签设置 allProductsDelivered
函数:
const allProductsDelivered = ({products}) => products.every(isDelivered);
然后嵌套的 every
将是:
if (options.tabs.every(allProductsDelivered)) {
statusTabs = "DELIVERED";
}
循环版本将是:
statusTabs = "DELIVERED";
for (const {products} of options.tabs) {
if (!allProductsDelivered(tab)) {
statusTabs = "UNDELIVERED";
break;
}
}
,
我猜你想要这样的东西:
const tabs = [{
visible: true,title: 'tab 0',products: [{
id: 1,send: true,delivered: true
},{
id: 1,delivered: true
}],},{
visible: true,title: 'tab 1',products: [{
id: 11,delivered: false
},{
id: 21,}
];
const isNotDelivered = (product) => product.delivered == false;
tabs.forEach(tab => {
const areAllProductsDelivered = !tab.products.find(isNotDelivered);
if (areAllProductsDelivered) {
console.log(`${tab.title} is completely delivered`);
} else {
console.log(`${tab.title} is NOT completely delivered`);
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。