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

时间:2016-07-29 19:20:07

标签: javascript mongodb

我有两个函数几乎完全相同,除了其中一个值为$ 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,
                        }
                    },
                );
            }

如果我尝试重构如下,那么我得到'密钥'没有被使用?

            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,
                        }
                    },
                );
            }

2 个答案:

答案 0 :(得分:0)

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



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
  });
}




答案 1 :(得分:-1)

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

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