我想检查数组中的每个对象,看看是否存在某些东西。因此,假设我的数组如下所示:
const arrayOfItems = [
{
delivery_method: {
delivery_method: 'car',
delivery_rate: 1,
pickup_day: 'none',
},
total_cost: 5,
items: [{}],
},
{
delivery_method: {
delivery_method: 'pickup',
pickup_day: 'T',
delivery_rate: 0,
},
total_cost: 5,
items: [{}],
},
]
现在我有一个如下所示的检查方法功能:
async checkMethodChosen() {
let check = await arrayOfItems.map((item) => {
if (
(item.delivery_method.delivery_method === 'pickup'
&& item.delivery_method.pickup_day !== 'none')
|| item.delivery_method.delivery_method === 'car'
|| item.delivery_method.delivery_method === 'bike'
) {
return false
}
return true
})
let deliveryChosen = check.includes(false)
this.setState({
deliveryChosen,
})
}
如果将delivery_method设置为'pickup'且选择了Pickup_day,或者如果delivery_method ==='car'或'bike',则该函数将状态设置为true或false。如果数组中只有一个对象,则可以正常工作。如果有多个对象,则无法正常工作。
我要发生的事情是,如果有多个对象,则只有在每个对象中都选择了delivery_method时,this.state.deliveryChosen才应该为true。如果尚未为一个对象选择该对象,则this.state.deliveryChosen应该为false。
谢谢!
答案 0 :(得分:2)
您要查找的函数是every()
,如果回调对数组中的每个项目都返回true,则它将返回true。
例如,这是一个简化版本,只返回布尔值:
const arrayOfItems = [{delivery_method: {delivery_method: 'car',delivery_rate: 1,pickup_day: 'none',},total_cost: 5,items: [{}],},{delivery_method: {delivery_method: 'pickup',pickup_day: 'T',delivery_rate: 0,},total_cost: 5,items: [{}],},]
function checkMethodChosen(arr) {
// will return true if every item of arr meets the following condition:
return arr.every((item) =>
(item.delivery_method.delivery_method === 'pickup' && item.delivery_method.pickup_day !== 'none')
|| item.delivery_method.delivery_method === 'car'
|| item.delivery_method.delivery_method === 'bike'
)
}
console.log(checkMethodChosen(arrayOfItems))