#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. Спасибо за ваш ответ, можем ли мы достичь этого в динамическом объекте.