首页 > 解决方案 > 如何在另一个对象中检查至少一个对象

问题描述

我需要验证表单域。
这是categories我表单中的字段。

categories = {
    category1: [ 
        { id: 1, quantity: 0 },
        { id: 2, quantity: 0 }
    ],
    category2: [ 
        { id: 3, quantity: 0 },
        { id: 4, quantity: 0 }
    ],
    category3: [ 
        { id: 5, quantity: 0 },
        { id: 6, quantity: 0 }  
    ]
}

这就是我检查AT LEAST ONE数组元素是否通过EACH category内的测试的方式。

for (const category in categories) {
    let theOne = categories[category].some(product => product.quantity !== 0);
}

这样,如果EACHquantity中至少有一个值为 1,则该表单将有效。 category

// I DONT WANT THIS
categories = {
    category1: [ 
        { id: 1, quantity: 1 }, // at least one quantity value is 1
        { id: 2, quantity: 0 }
    ],
    category2: [ 
        { id: 3, quantity: 1 }, // at least one quantity value is 1
        { id: 4, quantity: 0 }
    ],
    category3: [ 
        { id: 5, quantity: 1 }, // at least one quantity value is 1
        { id: 6, quantity: 0 }  
    ]
}


// I NEED THIS
categories = {
    category1: [ 
        { id: 1, quantity: 1 }, // at least one quantity value is 1
        { id: 2, quantity: 0 }
    ],
    category2: [ 
        { id: 3, quantity: 0 }, // not needed
        { id: 4, quantity: 0 }
    ],
    category3: [ 
        { id: 5, quantity: 0 }, // not needed
        { id: 6, quantity: 0 }  
    ]
}

怎么可能使它至少为一个工作category

标签: javascript

解决方案


那就是检查它们:

const categories = {
    category1: [{ id: 1, quantity: 0 }],
    category2: [{ id: 2, quantity: 1 }],
    category3: [{ id: 3, quantity: 0 }]
};

const didIPass = Object.values(categories).some((category) => {
    return category.some((subCategory) => subCategory.quantity !== 0);
});
console.log('Did I pass?', didIPass);

那就是具体检查每个内部:

Object.entries(categories).forEach((entry) => {
    const key = entry[0];
    const value = entry[1];
    const didIPass = value.some((subCategory) => subCategory.quantity !== 0);
    console.log(`Did ${key} pass? ${didIPass}`);
});

将产生输出:

Did I pass? true
Did category1 pass? false
Did category2 pass? true
Did category3 pass? false

推荐阅读