Используйте массив сокращений для извлечения свойств для нового объекта - PullRequest
0 голосов
/ 31 января 2020

У меня есть объект, который содержит имена свойств, которые указывают время начала и окончания расписания для каждого дня недели. У меня также есть массив, содержащий только сокращения дня.

Основываясь на этом массиве, я хочу преобразовать этот объект так, чтобы он выглядел так, как показано в разделе «Ожидаемый результат» ниже:

var options=["sun","mon","tues","wed"];
var items = {
  sun_start: "10:30",
  sun_end: "11:00",
  mon_start: "",
  mon_end: ""
}

Ожидаемый результат:

 {
  "sun": "10:30,11:00",
  "mon": "",
  "tues": "",
  "wed": ""
 }

Ответы [ 2 ]

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

Вот как бы я это сделал:

var options=["sun","mon","tues","wed"];
var items = {
  sun_start: "10:30",
  sun_end: "11:00",
  mon_start: "",
  mon_end: ""
}

function getStartEndString(dayAbbreviation)
{
  let startTime = ""
  let endTime = "";
  if (items.hasOwnProperty(dayAbbreviation+"_start"))
  {
    startTime = items[dayAbbreviation+"_start"];
  }
  if (items.hasOwnProperty(dayAbbreviation+"_end"))
  {
    endTime = items[dayAbbreviation+"_end"];
  }
  if(startTime.length > 0 && endTime.length > 0)
  {
    return `${startTime},${endTime}`;
  }
  else
  {
    return "";
  }
}

let obj = {};
options.forEach((dayAbbreviation)=>
{
  obj[dayAbbreviation] = getStartEndString(dayAbbreviation);
});
console.log(obj);
0 голосов
/ 31 января 2020

Ниже приведен фрагмент, который вам нужен.

var result = {};
options.forEach((option) => {
    var item_keys = Object.keys(items).filter(key => (key.indexOf(option) != -1));
    var val = '';
    item_keys.forEach(key => (val = val ? (val+','+items[key]) : items[key]));
    result[option] = val;
});
...