Angular карта для использования объекта - PullRequest
0 голосов
/ 07 августа 2020

Я работаю над некоторым кодом, с которым я незнаком.

У меня есть набор данных, который выглядит следующим образом:

[
 {"id": 1, "person_name": "joe", "parent_id": "1ax"}
 {"id": 2, "person_name": "jane", "parent_id": "5t6"}
 {"id": 3, "person_name": "john", "parent_id": "a88"}
]

Первоначально код содержит эту строку:

const values = this.data.map((d) => d.person_name).sort();

, а затем это:

groups = Object.values(
            values.reduce((a, c) => {
                (a[c] || (a[c] = { name: c, rcount: 0 })).rcount += 1;
                return a;
            }, {})
        ).sort(({ rcount: ac }, { rcount: bc }) => bc - ac);

Результатом будет что-то вроде этого:

[
 {name: "joe", rcount: 1},
 {name: "jane", rcount: 1},
 {name: "john", rcount: 1}
]

Я хотел бы включить parent_id в окончательный вывод, но могу Не понимаю, как.

Я пробовал несколько вещей в разделе .map(), но ни один из них еще не работал.

Я пробовал это, например:

const values = this.data.map((d) => d.person_name, d.parent_id).sort();

Есть ли способ, которым я могу сопоставить объект, а затем ссылаться на person_name и parent_id из значений при выполнении сокращения?

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Сопоставьте 2 элемента, которые вы хотите отобразить, с массивом:

data = [
    { "id": 1, "person_name": "joe", "parent_id": "1ax" },
    { "id": 2, "person_name": "jane", "parent_id": "5t6" },
    { "id": 3, "person_name": "john", "parent_id": "a88" }
]
const values = data.map((d) => [d.parent_id,d.person_name]).sort();
groups = Object.values(
    values.reduce((a, c) => {
        (a[c] || (a[c] = { name: c[1], id:c[0], rcount: 0 })).rcount += 1;
        return a;
    }, {})
).sort(({ rcount: ac }, { rcount: bc }) => bc - ac);

console.log(groups)
1 голос
/ 07 августа 2020

Решает ли это ответ?

const data = [{
    "id": 1,
    "person_name": "joe",
    "parent_id": "1ax"
}, {
    "id": 2,
    "person_name": "jane",
    "parent_id": "5t6"
}, {
    "id": 3,
    "person_name": "john",
    "parent_id": "a88"
}];

/* OLD */
// const values = this.data.map((d) => d.person_name).sort();
// looks like ['joe', 'jane', ...string]

/* NEW */
const values = data.map((d) => ({ name: d.person_name, parent_id: d.parent_id })).sort();
// looks like [{ name : 'joe', parent_id : '1ax' }, { name : 'jane', parent_id : '5t6' }, ...object]

// https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/reduce
const groups = Object.values(
    values.reduce((a, c) => {
    // the parameter 'a' is the accumulator
    // the parameter 'c' is the current element in array
    // since the array does longer contains strings but objects and we need a string as array index, we use the object name property like 'object.property' => 'c.name'
        (a[c.name] || (a[c.name] = {
            name: c.name,
            rcount: 0,
            // we add the property parent_id
            parent_id: c.parent_id
        })).rcount += 1;
        return a;
    }, {})
).sort(({
    rcount: ac
}, {
    rcount: bc
}) => bc - ac);

console.log(groups);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...