Возвращает дочерний массив с помощью Array.Map() в React

#javascript #reactjs #multidimensional-array #ecmascript-6

#javascript #reactjs #многомерный массив #ecmascript-6

Вопрос:

Мои данные из API выглядят следующим образом,

 [
  {
    "id": 1,
    "appName": "string",
    "defaultAction": "string",
    "defaultMessage": "string",
    "rules": [
      {
        "id": 1,
        "version": "string",
        "brand": "string",
        "action": "string",
        "message": "string"
      },
      {
        "id": 2,
        "version": "string",
        "brand": "new brand",
        "action": "string",
        "message": "string"
      }
    ]
  }
]
  

Я попытался, как показано ниже, прочитать дочерний массив из родительского массива из состояния для привязки к таблице

 const { posts } = this.state;
console.log(posts);
   const rule_list = posts.map(rules => {
  console.log(rules);
});
  

Но я вижу, что он по-прежнему возвращает полный массив, а не только дочерний элемент.Может кто-нибудь мне здесь помочь.

Комментарии:

1. Что console.log(posts); такое печать

Ответ №1:

Rules — это полный элемент с определенным индексом, вам необходимо получить доступ к свойству, к которому вы хотите получить доступ, т.е rules.rules

Или вы можете Destructuring_assignment

 let data = [ { "id": 1, "appName": "string", "defaultAction": "string", "defaultMessage": "string", "rules": [ { "id": 1, "version": "string", "brand": "string", "action": "string", "message": "string" }, { "id": 2, "version": "string", "brand": "new brand", "action": "string", "message": "string" } ] } ]

const rule_list = data.map(({rules}) => {
  console.log(rules);
});  

Комментарии:

1. Привет, если у меня есть 2 родительских узла и дочерние узлы, то он возвращает все дочерние узлы обоих родительских узлов. Здесь чего-то не хватает? мой API выдает следующие результаты [ { «id»: 1, «rules»: [ { «id»: 1, }, { «id»: 2, } ] }, { » идентификатор»: 2, «правила»: [] } ]

Ответ №2:

Вам необходимо получить доступ rules к свойству каждого элемента post, чтобы получить дочерний rules массив, как показано ниже.

 posts.map((post) => {
   console.log(post.rules);
});
  

если вы хотите сформировать массив правил из всех записей, вы можете сделать это, как показано ниже:

 const rule_list = posts.map((post) => {
        let { rules } = post;
        if(rules amp;amp; rules.length > 0) {
            return rules;
        }
    });
console.log(rule_list);