Тип сценария объединения объектов влево и вправо - PullRequest
0 голосов
/ 23 февраля 2019

как я могу создать функцию для объединения двух объектов.

  1. Первый аргумент: объект для объединения (слева)
  2. Второй аргумент: объект для объединения (справа)
  3. Третий аргумент: укажите, какое свойство остается в объединенном объекте.('concat', 'left', 'right'), по умолчанию - concat

concat: Оставить все свойства двух объектов left: Свойствовозвращаемый объект является свойством только объекта первого аргумента right: Свойство возвращаемого объекта является только свойством объекта второго аргумента

const input1 = {a: 'la', b: 'lb'};
const input2 = {a: 'ra', c: 'rc'};

// concat
mergeObj(input1, input2, 'concat'); // output: {a: 'ra', b: 'lb', c: 'rc'}
// left
mergeObj(input1, input2, 'left'); // output: {a: 'ra', b: 'lb'}
// right
mergeObj(input1, input2, 'right'); // output: {a: 'ra', c: 'rc'}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы можете просто использовать оператор переключения и назначение деструктурирования

const input1 = {a: 'la', b: 'lb'};
const input2 = {a: 'ra', c: 'rc'};

const mergeObj = ( input1, input2, prop ) => {
  switch(prop){
    case 'left' : return {...input1};
    case 'right': return {...input2};
    default: return {...input1,...input2}
  }
}


console.log( mergeObj(input1, input2, 'concat') );
console.log( mergeObj(input1, input2, 'left') );
console.log( mergeObj(input1, input2, 'right') );
0 голосов
/ 23 февраля 2019

Вы можете написать функцию mergeObj, которая на основе трех условий возвращает желаемый результат

Первый случай - Concat : вам необходимо объединить два объекта.Вы можете просто использовать Object.assign, чтобы сделать это

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

Третий случай - справа Просто верните второй объект

const input1 = {a: 'la', b: 'lb'};
const input2 = {a: 'ra', c: 'rc'};


function mergeObj(inp1, inp2, type) {

  if(type === 'concat') {
    return Object.assign({}, inp1, inp2);
  } 
  if (type === 'left') {
     return Object.assign({}, ...Object.entries(inp1).map(([k, val]) => ({[k]: inp2[k] || val})));
  }
  if (type === 'right') {
    return Object.assign({}, inp2);
  }
}
// concat
console.log(mergeObj(input1, input2, 'concat')); // output: {a: 'ra', b: 'lb', c: 'rc'}
// left
console.log(mergeObj(input1, input2, 'left')); // output: {a: 'ra', b: 'lb'}
// right
console.log(mergeObj(input1, input2, 'right')); // output: {a: 'ra', c: 'rc'}
...