javascript构建多维数组和对象

标签 javascript jquery arrays forms object

我正在尝试根据用户输入构建一个数组/对象,该表单具有radio、带有radiocheckbox >s、带有 radioselecttext 字段。我希望合并最终的数组/对象,以便将具有重复名称的激活的表单元素折叠为单个对象:

data = {
    name0 = (value0,value4), // checkbox
    name1 = (value2), // radio
    name2 = (value5), // select>option
    name4 = (''), // non-response
    name5 = (NULL) // form element was disabled/hidden
}

Javascript 似乎相当挑剔,所以我遇到了一些麻烦。我已将其分成 3 部分(Arr1、Arr2、Arr3),但似乎第一位仅保留最后一个表单元素,第二位在遇到每个名称后停止。

JSfiddle 中的代码:http://jsfiddle.net/jshado1/5Y7sn/12/

编辑:我希望 fiddle 中的示例的最终数组如下:
(未选中所有 alpha,选中 beta=1,选中 beta=2,选中 delta=3)

data : {
    { 'alpha'    : '' },
    { 'beta'     : '1','2' },
    { 'delta'    : '3' },
    { 'continue' : 'continue' }
}

(最终我将使用更精确的 jQuery 选择器过滤掉 [继续],并将按钮放在 div 之外)

最佳答案

我不太确定您的目标,但我可以看到您的代码存在一些问题:

  1. 您有一个全局变量 I,它初始化为 0 但从未更改,因此当您将其用作 Arr1[I] 的索引时.each()循环你将不断覆盖数组元素0。
  2. 当您的意思可能是 Arr2[n] += 1;Arr2[n]++; 时,您有 Arr2[n] = +1;
  3. 您的 for 循环使用未声明的 i 索引,尽管这应该可以工作(只是 i 是隐式全局的,并且声明所有变量总是更好)。
  4. 在开关中间,您有 Arr3[nom] += val;Arr3[nom] 从未初始化为 0,因此您实际上是在说 undefined += val 这将给出 NaN
  5. 在你的 switch 语句中,你有 case ("checkbox"|| "radio"):,它相当于 case "checkbox" 所以你永远不会匹配 " radio ”。您想要一个失败来涵盖这两个值。

更新您的开关:

switch(type) {
    case "checkbox":
        // fall-through
    case "radio":
        if (state) {
           if (Arr2[nom] > 1) {
               Arr3[nom] += val;
           } else {
               Arr3[nom] = val;
           }
        }
        break;
    case "text":
        Arr3[nom] = val;
        break;
    default:
        break;
}

正是在这一点上,我同意@Matmarbon并放弃。我建议您解决以上所有问题并回复我们。

关于javascript构建多维数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650509/

相关文章:

javascript - JQuery 点击显示保存按钮

javascript - 从嵌套数组中获取非空元素的数量

java - java - 如何声明数组而不必在java中给出固定的初始大小?

javascript - amCharts map ,纬度对数坐标上带有气泡

javascript - 存储在浏览器 session 存储与存储在内存变量中

javascript - jQuery 3 slim ajax 基本示例

c++ - 如何在 VS 调试器中查看 C++ 中动态字符串数组的内容

javascript - Ruby 在全局变量中与 Javascript 相比如何?

javascript - 当我从下拉按钮中选择一个值时,其他值也会出现

javascript - 使用 $.each 和 setInterval 循环播放连续动画?