我正在Node.js中设置数据库包,并且希望没有像这样写数据库的单独功能:
write(key, val)
和write({key: val, key2: val2})
。我在Stack Overflow和其他网站上看到了其他解决方案,并且希望拥有最简单的解决方案,因此我的函数可以“知道”它是键,val对还是JSON对象。例如:
if (argtype == "kvp") { // key val pair
databaseJSON[key] = val;
flushToDB(databaseJSON);
} else {
let j = databaseJSON;
for (let i in Object.values(obj)) j[Object.keys(obj)[i]] = Object.values(obj)[i];
flushToDB(databaseJSON);
}
谢谢!
答案 0 :(得分:0)
如果传递了两个参数,只需将val
分配给数据库的key
属性,否则将Object.assign
分配给数据库一个参数,以放置其所有属性和值从传递的对象到数据库:
function write(key, val) {
if (val !== undefined) {
database[key] = val;
} else {
Object.assign(database, key);
}
flushToDB(database)
}
const database = {};
const flushToDB = db => console.log('flushing');
function write(key, val) {
if (val !== undefined) {
database[key] = val;
} else {
Object.assign(database, key);
}
flushToDB(database)
}
write('key', 'val');
console.log('db:', database);
write({ key2: 'val2', key3: 'val3' });
console.log('db:', database);
因为这里的数据库是一个普通对象,而不是JSON(JSON格式的东西是 string ,在这里不是这种情况),所以最好将其命名为database
而不是{ {1}}。 (请参见There's no such thing as a "JSON Object")
答案 1 :(得分:0)
您可以使用它。
function foo() {
if (arguments.length == 1) {
// use your object code on arguments[0]
let j = databaseJSON;
let obj = arguments[0]
for (let i in Object.values(obj))
j[Object.keys(obj)[i]] = Object.values(obj)[i];
flushToDB(databaseJSON);
} else {
//user arguments[0] and arguments[1] for you key value
databaseJSON[arguments[0]] = arguments[1];
flushToDB(databaseJSON);
}
}
如果arguments.length == 0,也可能引发错误