从输入创建嵌套对象

时间:2021-02-23 23:10:47

标签: javascript jquery object

我想根据输入表单创建一个如下所示的嵌套对象。 第一个键是 name 属性,在它里面会被要求:true 如果输入包含 reqiuder 属性等。我假设我需要一个嵌套的 foreach,我不确定。我添加了到目前为止我尝试过的代码。

这是我喜欢创建的对象:

var obj = {
    'email.address': {
        required: true,
        email: true
     },
     'first.name': {
         required: false
     },
     'last.name': {
         required: true
     }
};

这是我目前的代码:

var formInputs = $('input'),
    obj = {};

$.each(formInputs, function(key, value) {
  obj[this.name] = value.name;
});

console.log(obj)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <input type="email" name="email.address" placeholder="Email address" required />
  <input type="text" name="first.name" placeholder="First name" />
  <input type="text" name="last.name" placeholder="Last name" required />
</form>

2 个答案:

答案 0 :(得分:1)

for (var i = 0, v; v = formInputs[i]; i++) { 
    for (var o of Object.keys(obj)) { 
        if (o !== v.name) { 
            continue;
        }
        for (var n of Object.keys(obj[o])) {
            v[n] = obj[o][n];
        }
    }
}

答案 1 :(得分:1)

问题在于您没有在解析之前等待文档加载。

jquery 允许您使用 $(document).ready()

等待文档准备就绪

这里有一个例子,你可以用

替换你的js
$(document).ready(function(){
var formInputs = $('input'),
    obj = {};
    $.each(formInputs, function(key, value) {
        obj[this.name] = {required: value.required}
    });
    console.log(obj)
})