Как получить доступ к ключу JSON с помощью .filter () - PullRequest
0 голосов
/ 26 апреля 2019

Как бы я отфильтровал следующие заголовки, используя .filter?Я ожидаю, что результат будет примерно таким: {"Capuchin Monkey", "Capybara"} Я работаю с JSON, который выглядит следующим образом:

{
  "d": {
    "results": [
      {
        "__metadata": {
          "id": "N/A",
          "type": "N/A"
        },
        "Courses": {
          "results": [
            {
              "__metadata": {
                "id": "N/A",
                "type": "N/A"
              },
              "Title": "Capuchin Monkey"
            },
            {
              "__metadata": {
                "id": "N/A",
                "type": "N/A"
              },
              "Title": "Capybara"
            },

Фрагмент JS:

// Courses/Title is what I'm interested in
    axios.get([redacted] + "/getByTitle('Categories')/items?$select=Title,Description,Courses/Title,SortOrder&$expand=Courses&$orderby=Title&$top=1000",
                {
                    method: "GET",
                    credentials: "include",
                    mode: "no-cors",
                    headers: {
                        "Accept": "application/json; odata=verbose"
                    }
                }),
   // irrelevant code
        ]).then(axios.spread((cat, lib, admn) => {
            _categories = cat.data.d.results; // -------- //

            this.loadCategories();
        })).catch(error => {
            console.log(error);
        });

getCategories(){ 
        return _categories;
    }

loadCategories(){ 
        let categs = _categories,
            trainingCrs = _categories.d.results.filter(x => {
                return {
                    "crsTitle": x.Courses.results.Title // code smell
                }
            });

Ответы [ 3 ]

1 голос
/ 26 апреля 2019

Я думаю, вам нужна карта, а не фильтр.Как то так:

var json = { "results": [
  {
    "__metadata": {
      "id": "N/A",
      "type": "N/A"
    },
    "Courses": {
      "results": [
        {
          "__metadata": {
            "id": "N/A",
            "type": "N/A"
          },
          "Title": "Capuchin Monkey"
        },
        {
          "__metadata": {
            "id": "N/A",
            "type": "N/A"
          },
          "Title": "Capybara"
        }]}}]};
const reducedResult = json.results.reduce((act, val)=> act.concat(val));
const titles = reducedResult.Courses.results.map((value)=>value.Title);
console.log(titles);
0 голосов
/ 26 апреля 2019
loadCategories(){ 
        let categs = _categories,
            trainingCrs = _categories.d.results.map((x) =>x.Courses.results.Title)
            });
0 голосов
/ 26 апреля 2019

Чтобы получить список заголовков, таких как {"Capuchin Monkey", "Capybara"}, лучше использовать Array .prototype .map () вместо Array .prototype .filter () .

var json = {
  "d": {
    "results": [
      {
        "__metadata": {
          "id": "N/A",
          "type": "N/A"
        },
        "Courses": {
          "results": [
            {
              "__metadata": {
                "id": "N/A",
                "type" : "N/A"
              },
              "Title": "Capuchin Monkey"
            },
            {
              "__metadata": {
                "id": "N/A",
                "type": "N/A"
              },
              "Title": "Capybara"
            }
          ]
        }
      }
    ]
  }
}

// Use of .map
trainingCrs = json.d.results[0].Courses.results.map(x => x.Title);
console.log("Training title list: ", trainingCrs);

// Use of .filter
trainingCrs = json.d.results[0].Courses.results.filter(x => x.Title === "Capybara");
console.log("Training list filter on one Title", trainingCrs);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...