将参数解析为MongodB的键时,Javascript中的重构问题

Refactoring issue in Javascript when parsing arguments to MongodB as keys

本文关键字:Javascript 重构 问题 MongodB 参数      更新时间:2023-09-26

我有两个几乎相同的函数,除了其中一个值要设置为$set,如图所示:

            function extracted_start(details, txt) {
                return FutureTasks.upsert({
                        number: details.number,
                        start_date: details.start_date,
                        end_date: details.end_date
                    }, {
                        $set: {
                            access_rights: txt,
                        }
                    },
                );
            }
            function extracted_end(details, txt) {
                return FutureTasks.upsert({
                        number: details.number,
                        start_date: details.start_date,
                        end_date: details.end_date
                    }, {
                        $set: {
                            returned_status: txt,
                        }
                    },
                );
            }

如果我试着按照下面的方式重构,那么我会得到"key"没有被使用吗?

            function extracted_generic(details, key, txt) {
                return FutureTasks.upsert({
                        number: details.number,
                        start_date: details.start_date,
                        end_date: details.end_date
                    }, {
                        $set: {
                            key: txt,
                        }
                    },
                );
            }

您使用键作为文字值,而不是变量。您必须创建一个对象并使用obj[key] = txt手动添加它。(旁注:您的函数名称中也拼写了"generic"错误。)

function extracted_generaic(details, key, txt) {
  var obj = {},
      obj[key] = txt;
  return FutureTasks.upsert({
    number: details.number,
    start_date: details.start_date,
    end_date: details.end_date,
  }, {
    $set: obj
  });
}

由于key被解释为字面单词"key"-首先创建您的对象并使用它:

var objToSet = {};
objToSet[key] = txt;
..
..
$set: objToSet