J'ai ce tableau:

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

Et ce tableau:

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

J'utilise ce code:

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

Cela fonctionne bien. Mais lorsqu'il n'y a pas de commandes pour un article spécifique dans la base de données, lorsque je clique sur le bouton de commande, un div avec les données de l'article ne s'affiche pas, il ne s'affiche que lorsque j'ai des commandes. Lorsque le site Web est chargé s'il y a des commandes, un div avec les articles et la liste des commandes s'affiche, mais lorsqu'il n'y a pas de commandes lorsque je clique sur ouvrir/afficher l'article, il ne s'affiche pas.

J'utilise une carte sur const dd, comme ceci :

<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>

Je ne sais pas si j'ai bien expliqué.

1
Saban 7 mars 2019 à 23:42

2 réponses

Meilleure réponse

Je pense que cela semble plus logique si vous voulez dire que le restaurant est open et qu'il y a some order au cas où il n'y aurait pas de commande, vous pouvez simplement afficher un message comme 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)
0
G.aziz 7 mars 2019 à 21:09

J'ai résolu mon problème avec ce code :

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 }) 

Existe-t-il un moyen d'écrire ce code en moins de lignes ? Ou même en une seule ligne de code ?

0
Saban 7 mars 2019 à 21:15