【问题标题】:Create nested object from inputs从输入创建嵌套对象
【发布时间】:2021-02-23 23:10:47
【问题描述】:

我想根据输入表单创建一个嵌套对象,如下所示。 第一个键是 name 属性,在里面它是必需的:如果 onput 包含 reqiuder 属性等,则为 true。我假设我需要一个嵌套的 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>

【问题讨论】:

  • 在属性名称中包含. 不是一个好主意,因为. 是用于将对象与其属性/方法分开的自然语法。多个单词名称的一般约定是使用 Pascal Case,如:firstNamelastNameemailAddress
  • 我知道,但是这些输入是由系统生成的,我对此无能为力。

标签: javascript jquery object


【解决方案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)
})

【讨论】:

    【解决方案2】:
    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];
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多