用if语句反应过滤两个数组

时间:2019-03-07 20:42:18

标签: javascript reactjs

我有这个数组:

items: [
  {
    _id: 1,
    name: honda,
    isOpened: false
  },
  {
    _id: 2,
    name: suzuki,
    isOpened: false
  },
  {
    _id: 3,
    name: audi,
    isOpened: false
  }
]

这个数组:

orders: [
  {
    _id: 123,
    user: Mark,
    ordersName: honda
  },
  {
    _id: 124,
    user: Angela,
    ordersName: honda
  },
  {
    _id: 125,
    user: Ana,
    ordersName: suzuki
  }
]

我正在使用以下代码:

const dd = this.props.items.filter(({ name: name1, isOpened = isOpened }) =>
  this.props.ordersList.some(
    ({ ordersName: name2 }) => name1 === name2 || isOpened === true
  )
)

工作正常。但是,当数据库中没有特定项目的订单时,当我单击“订单”按钮时,不显示包含项目数据的div,它仅在我有订单时显示。加载网站时,如果有一些订单,则会显示一个包含项目和订单列表的div,但是当我单击打开/显示项目时,没有订单时,它不会显示。

我正在使用const dd上的映射,就像这样:

<div>
  <div>
    {dd.map(response => {
      response.isOpened = true;
      return (
        <div className="panel" key={response._id}>
          <h1>{response.name}</h1>
          <div>
            {this.props.ordersList.map(res => {
              if (response.name == res.ordersName) {
                return (
                  <div>
                    <h3>{res.ordersName}</h3>
                  </div>
                );
              }
            })}
          </div>
        </div>
      );
    })}
  </div>
</div>

我不知道我是否解释得很好。

2 个答案:

答案 0 :(得分:0)

如果要说餐厅是open并且有some order,我想这似乎更合乎逻辑,如果没有订单,您可以只显示There is no order

const items = [{
    _id: 1,
    name: "honda",
    isOpened: true
  },
  {
    _id: 2,
    name: "suzuki",
    isOpened: true
  },
  {
    _id: 3,
    name: "audi",
    isOpened: false
  }
]

const orders = [{
    _id: 123,
    user: "Mark",
    ordersName: "honda"
  },
  {
    _id: 124,
    user: "Angela",
    ordersName: "honda"
  },
  {
    _id: 125,
    user: "Ana",
    ordersName: "suzuki"
  }
]

const dd = items.filter(({
    name: name1,
    isOpened
  }) => {
    if (isOpened)
      return orders.filter(
        ({
          ordersName: name2
        }) => name1 === name2
      )
  }

)


console.log(dd)

答案 1 :(得分:0)

我已使用以下代码解决了我的问题:

const dd1= this.props.items.filter(({name: name1}) => this.props.orders.some(({ordersName: name2}) => name1 === name2)); dd1.map(itms=>{ itms.isOpened=true }) const dd=this.props.items.filter(itm=>{ return itm.isOpened==true }) 

有什么方法可以用更少的行来编写代码?甚至是一行代码?