将对象映射到字符串表达式

时间:2017-05-03 19:13:52

标签: javascript

以下固定表达式和值需要更改为动态:

function update(args) {
  const params = {
    UpdateExpression: 'set firstName = :firstName, lastName = :lastName, sex = :sex',
    // values map to UpdateExpression
    ExpressionAttributeValues: {
      ':firstName': args.firstName,
      ':lastName': args.lastName,
      ':sex': args.sex
    }
  };

  // db specific code, not relevant
}

目前仅适用于固定参数,例如:

update({firstName: 'Joe', lastName: 'Doe', sex: 'M'}

我需要UpdateExpressionExpressionAttributeValues动态更改或多或少的参数,例如

  1. args也有height: 190
  2. height = :height添加到UpdateExpression(和逗号)
  3. ':height': args.height添加到ExpressionAttributeValues
  4. 我应该如何解析该表达式以及如何处理逗号?

    我得到了什么:

    表达式字符串生成看起来很尴尬,我的逗号也有问题。

    
    
    const args = {
      id: 'id-123',
      firstName: 'John',
      lastName: 'Doe',
      updated: 1491111234
    };
    
    function update(args) {
      console.log('===');
      expression = 'set ';
      values = {};
    
      for (let variable in args) {
        // expression string
        let str = `${variable} = :${variable}, `;
        console.log(str);
        expression = expression.concat(str);
    
        // values object
        values[`:${variable}`] = args[variable];
      }
    
      console.log('---');
      console.log('UpdateExpression:', expression);
      console.log('ExpressionAttributeValues:', values);
      console.log('===');
    }
    
    update(args);
    
    
    

1 个答案:

答案 0 :(得分:1)

您只需要一种确定何时添加逗号的方法,除了最后一次之外,每次都应该这样。因此,您可以使用Object.keys获取对象的键,并执行标准Ionic2循环以检查它是否是最后一个。

for