在Javascript

时间:2016-03-12 23:17:43

标签: javascript object

我正在尝试使用html输入字段动态创建具有名称 - 值对的对象。这就是我到目前为止所做的:

var taskComplete = {
  newTask: function(arg) {
    var fieldObj = {},
        selector = arg,
        inputFields = document.getElementsByClassName(selector);          
    for (var i=0;i<inputFields.length;i++) {
      var attrValue = inputFields[i].getAttribute("name"),
          value = inputFields[i].value, 
          newFieldObj = fieldObj[i] = {[attrValue]: value };
      console.log(newFieldObj);             
    }      
  }
}
taskComplete.newTask('input');

控制台日志输出:

Object {title: ""}
Object {description: ""}
Object {date: ""}

问题1: 我如何访问这些对象?他们都有相同的名字,例如。 &#39;对象&#39;所以&#39; object.title&#39;不起作用。

问题2: 有没有办法将这些对象组合成一个对象? 例如

var obj = {
  title: "",
  description: "",
  date: "",
}

使用html的代码示例:codepen.io

希望这是有道理的。感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:3)

不清楚你要在这里做什么。

为什么不将这些属性分配给您已经拥有的fieldObj,而不是为循环的每次迭代创建一个新对象?

然后你可以在调用代码中返回该对象并用它做任何你想做的事情:

'use strict';

// ** TASK OBJECT ** //
var taskComplete = {
  newTask: function(selector) {
    var fieldObj = {},
        inputFields = document.getElementsByClassName(selector);

    for (var i = 0; i < inputFields.length; i++) {
      var attrKey = inputFields[i].getAttribute("name"),
          value = inputFields[i].value;

      fieldObj[attrKey] = value;
    }

    return fieldObj;
  }
}
var o = taskComplete.newTask('input');
console.dir(o);

http://codepen.io/anon/pen/reMLPB?editors=0010

答案 1 :(得分:3)

我会以相反的顺序回答你的问题,更有意义,你会看到。

  

问题2:有没有办法将这些对象组合成一个对象?

是的,我很高兴地通知你,你绝对可以。你在哪里

newFieldObj = fieldObj[i] = {[attrValue]: value };

简单地做

fieldObj[attrValue] = value;

这样做有以下几点:在fieldObj上,这是一个普通的{}设置一个以attrValue的值命名的密钥,并将该密钥与值{{配对1}}

  

问题1:如何访问这些对象?他们都有相同的名字,例如。 &#39;对象&#39;所以&#39; object.title&#39;不起作用。

为了能够访问这些对象,您的value方法应该返回它们。因此,在newTask方法结束时,只需执行newTask,就这样

return fieldObj;

然后将返回的值存储到一个新变量中,如下所示:

var taskComplete = {
  newTask: function(arg) {
    var fieldObj = {},
        selector = arg,
        inputFields = document.getElementsByClassName(selector),
        attrValue,
        value;

    for (var i=0;i<inputFields.length;i++) {
      attrValue = inputFields[i].getAttribute("name");
      value = inputFields[i].value;
      fieldObj[attrValue] = value;     
    }      
    return fieldObj;
  }
}

以下是修改过的笔: http://codepen.io/anon/pen/XdjKQJ