代码之家  ›  专栏  ›  技术社区  ›  Fino

从javascript中的命名值中移除元素

  •  0
  • Fino  · 技术社区  · 5 年前

    我有以下函数,在提交谷歌表单时调用。我试图将所有答案连接到一个数组中,后者将使用:

    function onFormSubmit(e) {
    var respostas = e.namedValues;
    
    for(item in respostas){
        rp = rp.concat(respostas[item]);
      }
    }
    

    但我想删除与答案一起出现的时间戳。我可以用 respostas['Timestamp'] 但是我找不到一种方法可以放弃或忽略它。这个 documentation 没什么帮助。

    3 回复  |  直到 5 年前
        1
  •  1
  •   NemoStein    5 年前

    在将属性与其余属性连接之前,可以检查该属性的名称。
    如果钥匙 item 等于 Timestamp (不需要的属性)跳过当前循环。

    for(item in respostas) {
        if (item === 'Timestamp') {
           continue;
        }
    
        rp = rp.concat(respostas[item]);
    }
    

    编辑:根据注释,op证明 item in the for..in loop是一个整数,但是,除非他/她的代码与docs根本不同,否则变量应保持字符串,而不是数字。

    &13;
    &13;
    var respostas = {
      'First Name': ['Jane'],
      'Timestamp': ['6/7/2015 20:54:13'],
      'Last Name': ['Doe']
    };
    
    for(item in respostas) {
        console.log(item);
    }
    和13;
    >13;
    >13;
        2
  •  3
  •   Nikolay Nikolov    5 年前
    var cp = [];
    function onSubmitForm(e) {
        var respostas = e.namedValues;
        for (var name in respostas) {
            if (respostas.hasOwnProperty(name) {
                if (name !== 'Timestamp') {
                    cp.push(respostash[name]);
                }
            }
        }
    }
    

    这就是我的建议。使用concat添加一个项目是多余的,您可以直接推它。当您循环遍历对象属性以确保它们是该对象本身的属性,而不是从原型继承时,这也是一个很好的实践。你可以多读一些 here

        3
  •  0
  •   Chris    5 年前

    e.namedValues 返回带有自定义键的JSON对象。

    var jsonObj = e.namesValues;
    
    /* e.namedValues returns data like this...
    {
      "test1": "testval1",
      "test2": "testval2",
      "test3": "testval3",
    }
    */
    for(item in respostas){
        Logger.log(item); //Key
        Logger.log(respostas[item]); //Value
    }
    

    这将允许您访问中的项的键或值。 respostas

    < Buff行情>

    接受的答案更好,因为它更能帮助用户解决他们的确切问题,但是,如果未来的用户想了解如何访问Google应用程序脚本返回的对象中的变量,我将把它留在这里。 < /块引用>