Как изменить значение в массиве Object из массива со строкой значения - PullRequest
0 голосов
/ 30 января 2019

У меня есть два массива, основываясь на массиве из daysActive значения, я хотел проанализировать второй массив объектов со значением ключа value и изменить значение ключа checked на true

var daysActive = ['monday', 'tuesday', 'wednesday'];

var weekDays = [{ "name": "Sunday", "value": "sunday", "id": "SUN","checked":false,disabled:true },
            { "name": "Monday", "value": "monday", "id": "MON" ,"checked":false,disabled:true},
            { "name": "Tuesday", "value": "tuesday", "id": "TUE","checked":false,disabled:true },
            { "name": "Wednesday", "value": "wednesday", "id": "WED","checked":false,disabled:true },
            { "name": "Thursday", "value": "thursday", "id": "THU","checked":false,disabled:true },
            { "name": "Friday", "value": "friday", "id": "FRI","checked":false,disabled:true },
            { "name": "Saturday", "value": "saturday", "id": "SAT","checked":false,disabled:true}
            ];

результирующий массив

var resultantDays = [{ "name": "Sunday", "value": "sunday", "id": "SUN","checked":false, disabled:true },
                { "name": "Monday", "value": "monday", "id": "MON" ,"checked":true, disabled:true},
                { "name": "Tuesday", "value": "tuesday", "id": "TUE","checked":true, disabled:true },
                { "name": "Wednesday", "value": "wednesday", "id": "WED","checked":true, disabled:true },
                { "name": "Thursday", "value": "thursday", "id": "THU","checked":false, disabled:true },
                { "name": "Friday", "value": "friday", "id": "FRI","checked":false, disabled:true },
                { "name": "Saturday", "value": "saturday", "id": "SAT","checked":false, disabled:true}
                ];

Я пробовал это, но его подход не является правильным.

var modifiedWeekdays = days.map(value => {
  weekdays.forEach(function(val, key) {
    Object.entries(val).forEach(([keyObj, valObj]) => {
       if (keyObj === 'value' && valObj === value) {

       }
    });
  });
});

Ответы [ 4 ]

0 голосов
/ 30 января 2019

for (let dayOfWeek of daysActive){
    weekDays.filter(it => it['value']=== dayOfWeek)[0].checked=true;
}
0 голосов
/ 30 января 2019

То же, что и решение @Vineesh:)

var daysActive = ["monday", "tuesday", "wednesday"];

var weekDays = [
  {
    name: "Sunday",
    value: "sunday",
    id: "SUN",
    checked: false,
    disabled: true
  },
  {
    name: "Monday",
    value: "monday",
    id: "MON",
    checked: false,
    disabled: true
  },
  {
    name: "Tuesday",
    value: "tuesday",
    id: "TUE",
    checked: false,
    disabled: true
  },
  {
    name: "Wednesday",
    value: "wednesday",
    id: "WED",
    checked: false,
    disabled: true
  },
  {
    name: "Thursday",
    value: "thursday",
    id: "THU",
    checked: false,
    disabled: true
  },
  {
    name: "Friday",
    value: "friday",
    id: "FRI",
    checked: false,
    disabled: true
  },
  {
    name: "Saturday",
    value: "saturday",
    id: "SAT",
    checked: false,
    disabled: true
  }
];

daysActive.forEach(dayActive => {
  const activeDay = weekDays.find(day => day.value === dayActive);
  activeDay.checked = !activeDay.checked;
});

console.log(weekDays);
0 голосов
/ 30 января 2019

Вы можете использовать Array.prototype.reduce () в сочетании с Array.prototype.includes ()

Код:

const daysActive = ['monday', 'tuesday', 'wednesday'];
const weekDays = [{ "name": "Sunday", "value": "sunday", "id": "SUN","checked":false,disabled:true },
  { "name": "Monday", "value": "monday", "id": "MON" ,"checked":false,disabled:true},
  { "name": "Tuesday", "value": "tuesday", "id": "TUE","checked":false,disabled:true },
  { "name": "Wednesday", "value": "wednesday", "id": "WED","checked":false,disabled:true },
  { "name": "Thursday", "value": "thursday", "id": "THU","checked":false,disabled:true },
  { "name": "Friday", "value": "friday", "id": "FRI","checked":false,disabled:true },
  { "name": "Saturday", "value": "saturday", "id": "SAT","checked":false,disabled:true}
];
const resultantDays = weekDays.reduce((a, c) => [...a, c.checked = daysActive.includes(c.value), c], []);

console.log(resultantDays);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 30 января 2019

Вы можете использовать функцию map в массиве weekDays, чтобы увидеть, есть ли значение в daysActive массиве

var daysActive = ['monday', 'tuesday', 'wednesday'];

var weekDays = [{ "name": "Sunday", "value": "sunday", "id": "SUN","checked":false,disabled:true },
            { "name": "Monday", "value": "monday", "id": "MON" ,"checked":false,disabled:true},
            { "name": "Tuesday", "value": "tuesday", "id": "TUE","checked":false,disabled:true },
            { "name": "Wednesday", "value": "wednesday", "id": "WED","checked":false,disabled:true },
            { "name": "Thursday", "value": "thursday", "id": "THU","checked":false,disabled:true },
            { "name": "Friday", "value": "friday", "id": "FRI","checked":false,disabled:true },
            { "name": "Saturday", "value": "saturday", "id": "SAT","checked":false,disabled:true}
            ];
weekDays.map(day => {
    day.checked = daysActive.indexOf(day.value) !== -1;
});
console.log(weekDays);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...