Самый быстрый способ получить доступ ко всем вложенным значениям из объекта в AngularJS - PullRequest
0 голосов
/ 08 января 2020

В AngularJS У меня есть объект тысяч записей из вызова API JSON. Мне нужно создать новый массив только из одного указанного c ключа из каждой записи ("topi c"), что приведет к массиву только уникальных значений. Является ли foreach l oop единственным способом сделать это? Например:

Массив данных (обр):

{
"id": 1,
"number": 2,
"section": "xx",
"importance": "high",
"applicability": "General",
"text": "some text here",
"topic": 
    {
        "id": 30,
        "title": "Gender and Diversity"
    }
 },
{
"id": 2,
"number": 2.1,
"section": "xx",
"importance": "high",
"applicability": "General",
"text": "some text here",
"topic": 
    {
        "id": 31,
        "title": "Health and Safety"
    }
 }, ...

Я хотел бы получить массив только тем из тысяч записей, например:

"topic": 
{
    "id": 30,
    "title": "Gender and Diversity"
},
"topic": 
{
    "id": 31,
    "title": "Health and Safety"
},..

Есть ли лучший (более быстрый) метод для создания этого списка, чем тот, который у меня есть в настоящее время: foreach l oop с операторами if, за которым следует фильтр уникальных значений ?:

var topics = function (arr) {
            var topics = [];
            angular.forEach(arr.data, function (ts) {
                angular.forEach(ts.topic, function (t) {
                    if (t.title) {
                        this.push(t);
                    }
                }, topics);

            });

            // Filter the unique values
            var elementId = [];

            var uniqueTopics = topics.filter(el => {
                if (elementId.indexOf(el.id) === -1) {
                    // If not present in array, then add it
                    elementId.push(el.id);
                    return true;
                } else {
                    // Already present in array, don't add it
                    return false;
                }
            });

            return uniqueTopics;

        };

1 Ответ

2 голосов
/ 08 января 2020

Это может помочь.

var data = [
{
"id": 1,
"number": 2,
"section": "xx",
"importance": "high",
"applicability": "General",
"text": "some text here",
"topic": 
    {
        "id": 30,
        "title": "Gender and Diversity"
    }
 },
{
"id": 2,
"number": 2.1,
"section": "xx",
"importance": "high",
"applicability": "General",
"text": "some text here",
"topic": 
    {
        "id": 31,
        "title": "Health and Safety"
    }
 }
];

console.log(
  data.map(d => { return { "topic": d.topic }; })
);

var data = [
    {
    "id": 1,
    "number": 2,
    "section": "xx",
    "importance": "high",
    "applicability": "General",
    "text": "some text here",
    "topic": 
        {
            "id": 30,
            "title": "Gender and Diversity"
        }
     },
    {
    "id": 2,
    "number": 2.1,
    "section": "xx",
    "importance": "high",
    "applicability": "General",
    "text": "some text here",
    "topic": 
        {
            "id": 31,
            "title": "Health and Safety"
        }
     }
    ];

    console.log(
      data.map(d => d.topic)
    );
...