您可以通过多种方式在Javascript中运行函数吗?

时间:2019-08-18 21:48:56

标签: javascript node.js

我正在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);
}

谢谢!

2 个答案:

答案 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,也可能引发错误