web-dev-qa-db-fra.com

Comment parcourir les objets d'un tableau dans Lodash

J'essaie d'utiliser lodash dans un modèle HTML pour un e-mail dans Node.js. J'ai un tableau avec plusieurs objets. Je voudrais parcourir chaque objet et répertorier toutes les valeurs répétitives. Lorsque j'utilise le code ci-dessous, je reçois une erreur indiquant que la valeur n'est pas définie (par exemple, ReferenceError: firstName is not defined). Le modèle HTML se trouve dans un fichier séparé.

Des pensées sur ce que je fais mal?

Javascript:

var template = fs.readFileSync('server/views/email-template.html').toString();
var htmlAll = _.template(template)(orderInfo);

HTML:

<% _.forEach(function(firstName) { %><%- firstName %></td><% }); %> <% _.forEach(function(lastName) { %><%- lastName %></td><% }); %>
<% _.forEach(function(address) { %><%- address %></td><% });%>
<% _.forEach(function(city) { %><%- city %><% }); %>, <% _.forEach(function(state.code) { %><%- state.code %><% });
%> <% _.forEach(function(Zip) { %><%- Zip %><% }); %>

<% _.forEach(function(item) { %><td><%- item %></td><% }); %>
<% _.forEach(function(cost) { %><td><%- cost %></td><% }); %>

Tableau:

[
  {
    "firstName": "John",
    "lastName": "Doe",
    "address": "123 Broadway",
    "city": "New York",
    "state": {
      "code": "NY",
      "state": "New York"
    },
    "Zip": "10001",
  },

  {
    "color": "White",
    "size": "M",   
    "item": "T-Shirt",
    "cost": 19.99,
  },
  {
    "color": "Blue",
    "size": "L",   
    "item": "T-Shirt",
    "cost": 19.99,
  }
]
14
Ken

Il y a deux ou trois choses qui ne vont pas ici. En commençant par la syntaxe du modèle, vous spécifiez uniquement l'itérateur à foreach dans votre modèle, mais nous avons besoin des données et de l'itérateur tous les deux comme suit

_.forEach(users, function(user){

De plus, vous avez plusieurs objets en position de tableau unique, j'ai donc mis à jour un peu la structure json également.

Après un modèle de mises à jour mineures, quelque chose comme ceci avec une propriété manquante intentionnellement,

var tmpl = _.template('<ul><% _.forEach(users, function(user) { %><li><%- user.firstName %></li><li><%- user.address %></li><li><%- user.state.code %></li><li><%- user.state.state %></li><ol> <% _.forEach(user.orders, function(order) { %> <li><span><%- order.item %><span> cost is: <span><%- order.cost %><span></li> <% }); %> </ol> <% }); %></ul>');

et json avec des tableaux de commandes dans le même objet est le suivant

var data = { 'users': 

        [
  {
    "firstName": "John",
    "lastName": "Doe",
    "address": "123 Broadway",
    "city": "New York",
    "state": {
      "code": "NY",
      "state": "New York"
    },
    "Zip": "10001",
    "orders": [
        {
            "color": "White",
            "size": "M",   
            "item": "T-Shirt",
            "cost": 19.99,
        },
        {
            "color": "Blue",
            "size": "L",   
            "item": "Pant",
            "cost": 19.99,
        }
  ]  
  } 
]
};

Vous pouvez le voir fonctionner ici à [~ # ~] jsbin [~ # ~]

14
Haseeb Asif

C'est parce que vous donnez orderInfo[0] à votre modèle. Et dans votre tableau, orderInfo[0] est juste cette partie:

{
    "firstName": "John",
    "lastName": "Doe",
    "address": "123 Broadway",
    "city": "New York",
    "state": {
      "code": "NY",
      "state": "New York"
    },
    "Zip": "10001",
}

Le modèle ne peut donc pas répéter les valeurs manquantes.

1
Magus

Vous pouvez également le faire dans le style de fonction de flèche ES6:

const users = ['Jack', 'Jill']; _.forEach(users, user => {console.log(user);});

0
John Meyer