помощь по js помогите пожалуйста

236
01 мая 2018, 01:08

Всем привет,помогите пожалуйста,есть вот такой массив данных

var obj = [{
    name: 'Test',
    expirence: '364 days',
    Frontender: true,
    Backender: false,
    company: 'Company'
  },
  {
    name: 'Test 2',
    expirence: '367 days',
    Frontender: true,
    Backender: false,
    company: 'Company'
  },
  {
    name: 'Test 3',
    expirence: '731 days',
    Frontender: true,
    Backender: false,
    company: 'Company'
  }
];

И есть такое задание: 6) добавить объектам метод для преобразования в строковый тип - должно вернуть '_' 7) добавить объектам метод для преобразования в численный тип - должно вернуть '<кол-во лет опыта>' И вот такое решение:

var patt = /[^0-9]/g,
  period = 365,
  res = [];
function daysToYears(targetObj) {
  targetObj.forEach(function(item, idx) {
    itemExp = item.expirence.replace(patt, "")
    if (itemExp > period) {
      res = [item.name, Math.floor(itemExp / period)];
      console.log(res);
    }
  });
}
daysToYears(obj);

как можно переписать решение 6 и 7 пункта через классы:

Т.е в базовый класс добавляются методы приведения объекта к строке и числу, а в дочернем метод приведения к строке переопределить - должны получить "Frontender__'.

И немного не понимаю как это можно сделать в функциональном и прототипном стилях. Я конечно понимаю,что это не фриланс,но буду очень благодарен если поможете или объясните(

Answer 1

Мы должны для каждого объекта добавить функцию, которая возвращает значение.

var obj = [ 
  { 
   name: "Test", 
   expirence: "364 days", 
   Frontender: true, 
   Backender: false, 
   company: "Company" 
  }, 
  { 
   name: "Test 2", 
   expirence: "367 days", 
   Frontender: true, 
   Backender: false, 
   company: "Company" 
  }, 
  { 
   name: "Test 3", 
   expirence: "731 days", 
   Frontender: true, 
   Backender: false, 
   company: "Company" 
  } 
]; 
 
obj = obj.map(o => ({ //Перебираем весь массив 
  ...o,               // Добавляем в новый объект значение из старого 
  getName() {         // Создаем новый метод, для п.6 
                  // PS getName() тоже самое что и getName: function() 
   return `${this.company}_${this.name}`; 
  }, 
  daysToYears(){     // Создаем новый метод, для п.7 
   return Math.floor(this.expirence.replace(/[^0-9]/g, "") / 365); 
  } 
})); 
                 // Проверяем 
console.log(" LOG ___ ", obj[1].getName()); 
console.log(" LOG ___ ", obj[2].daysToYears());

READ ALSO
Как получить имена все товаров ?

Как получить имена все товаров ?

Хочу получить только имена объектов (cat, dog, bird)

204
Vue.js передача дочернего компонента

Vue.js передача дочернего компонента

Моя главная задача - сделать меню в ToolBar различным для разных маршрутов, те

159
Переменные js и атрибуты data-*

Переменные js и атрибуты data-*

Имеются кнопкиИмеются переменные, каждая из которых соответсвует каждой кнопке - она принимает значение true при нажатии, остальные принимают...

211
Как передать в callback delay в функцию debounce?

Как передать в callback delay в функцию debounce?

Как передать в callback delay ? Так не работает

167