Угловые 5 Петель - PullRequest
       6

Угловые 5 Петель

0 голосов
/ 27 апреля 2018

У меня есть массив для дней, как показано ниже в моем component.ts

private days = [{
        'id': 1,
        'day': 'Monday'
    },
    {
        'id': 2,
        'day': 'Tuesday '
    },
    {
        'id': 3,
        'day': 'Wednesday '
    },
    {
        'id': 4,
        'day': 'Thursday'
    },
    {
        'id': 5,
        'day': 'Friday'
    },
    {
        'id': 6,
        'day': 'Saturday'
    },
    {
        'id': 7,
        'day': 'Sunday'
    }];

Я получаю ниже результат от вызова API

"branchDetails": [
        {
            "user_id": 2,
            "business_branch_id": 3,
            "branch_name": "Synaptech-cloud2",
            "branch_default": 1,
            "gen_dayofweek_id": [
                {
                    "id": 1
                },
                {
                    "id": 2
                }
            ],
            "start_date": "10-09-2013",
            "end_date": "10-09-2017"
        },
        {
            "user_id": 2,
            "business_branch_id": 2,
            "branch_name": "Synaptech-cloud1",
            "branch_default": 0,
            "gen_dayofweek_id": [
                {
                    "id": 1
                },
                {
                    "id": 3
                }
            ],
            "start_date": "10-09-2013",
            "end_date": "10-09-2017"
        }
    ]

В представлении (браузер) мне нужно отобразить поле (Доступные дни), которое должно содержать дни, которых нет в массиве gen_dayofweek_id (поле в результате API)

ввиду мне нужно показать как показано ниже

available days:  Wednesday, Thursday, Friday, Saturday, Sunday


available days: Tuesday, Thursday, Friday, Saturday, Sunday

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018
let user_days = [{
  "id": 1
}, {
  "id": 2
}];
user_day_arr = user_days.map(function (obj) {
  return obj.id;
});
let full_days = [1, 2, 3, 4, 5, 6, 7];
let result = full_days.filter(day => !user_day_arr.includes(day));
let days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
console.log(result);
//Available days.
result.forEach(function(e) {
  console.log(days[e]);
});
0 голосов
/ 27 апреля 2018

Firt, дни начинаются с индекса 0 и в воскресенье. Даже если это не относится к вашему делу, вы должны справиться с этим.

Далее, вот как вы можете это сделать

for (let branch of branchDetails) {
  const ids = branch.gen_dayofweek_id.map(item => item.id);
  const availableDays = days
    .filter(item => !ids.includes(item.id))
    .map(item => item.day);
  console.log(availableDays);
}

Это должно регистрировать массивы названий дней.

РЕДАКТИРОВАТЬ после моего первого утверждения, вот как должна выглядеть ваша структура данных:

days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

"branchDetails": [{
  "user_id": 2,
  "business_branch_id": 3,
  "branch_name": "Synaptech-cloud2",
  "branch_default": 1,
  "gen_dayofweek_id": [2, 3],
  "start_date": "10-09-2013",
  "end_date": "10-09-2017"
 },
 {
  "user_id": 2,
  "business_branch_id": 2,
  "branch_name": "Synaptech-cloud1",
  "branch_default": 0,
  "gen_dayofweek_id": [2, 4],
  "start_date": "10-09-2013",
  "end_date": "10-09-2017"
 }]

С этим вы можете идти еще быстрее

for (let branch of branchDetails) {
  const availableDays = days
    .filter((item, index) => !branch.gen_dayofweek_id.includes(index))
  console.log(availableDays);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...