使用地图功能检查多个项目

时间:2018-10-17 19:43:08

标签: javascript arrays

我想检查数组中的每个对象,看看是否存在某些东西。因此,假设我的数组如下所示:

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。

谢谢!

1 个答案:

答案 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))