Каков наилучший способ сбросить значения динамического объекта

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть динамический объект :

   input: {
   key1: 'text1',
   key2: 10000,
   key3: 3456,
   key4: 'text2',
   key5: ['v1','v2','v3'] .....
}
  

Я хотел бы сбросить его на

 output
{
       key1: '',
       key2: 0,
       key3: 0,
       key4: '',
       key5: []
.......
}
  

Я не нашел никакого прямого метода для этого, я знаю, как сделать это с помощью цикла. Мне было интересно, есть ли у нас лучший метод / лучшие практики для получения выходных данных.

Комментарии:

1. Можем ли мы достичь на динамическом объекте.?

Ответ №1:

Вы могли бы Object.assign использовать объект с требуемыми значениями.

Этот метод не заменяет неизвестные свойства. В этом случае вам нужен новый объект или вам нужно заранее удалить все свойства.

 const
    values = { key1: '', key2: 0, key3: 0, key4: '', key5: [] },
    input = { key1: 'text1', key2: 10000, key3: 3456, key4: 'text2', key5: ['v1','v2','v3'] };

Object.assign(input, values);

console.log(input);  

Динамический объект с удалением собственных перечислимых свойств.

 const
    values = { key1: '', key2: 0, key3: 0, key4: '', key5: [] },
    input = { foo: '42', bar: '101', key1: 'text1', key2: 10000, key3: 3456, key4: 'text2', key5: ['v1','v2','v3'] };


Object.keys(input).forEach(Reflect.deleteProperty.bind(null, input));
Object.assign(input, values);

console.log(input);  

Комментарии:

1. Спасибо за ваш ответ, можем ли мы достичь этого в динамическом объекте.

Ответ №2:

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

 let input = {key1:'text1', key2:10000, key3:3456, key4:'text2', key5:['v1','v2','v3']}

const defaultValues = {key1:'', key2:0, key3:0, key4:'', key5:[]}

input = {
  ...defaultValues
}

console.log(input)  

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

 let input = {key1:'text1', key2:10000, key3:3456, key4:'text2', key5:['v1','v2','v3']}

const resetData = (data) => {
  let keys = Object.keys(data);
  let dataCopy = {};
  keys.forEach(key => {
    if(Array.isArray(data[key])) {
      dataCopy[key] = []
    } else if(typeof data[key] === "object") {
      dataCopy[key] = {}
    } else if(typeof data[key] === "string") {
      dataCopy[key] = ""
    } else {
      dataCopy[key] = 0
    }
  })

  return dataCopy;
}

console.log(resetData(input));

input = {key6: {abc: "123"}, key7: "dummy", key8: [1, 2, 3] }

console.log(resetData(input));  

Комментарии:

1. Спасибо за ваш ответ, можем ли мы достичь этого в динамическом объекте.