jQuery添加重复数组键

时间:2019-06-17 08:04:17

标签: javascript jquery arrays

我需要使用重复的键名称(如下一个)创建一个javascript(jquery)数组

{
    "apple": "type1",
    "apple": "type2",
}

这是我当前使用的代码

var data = {};
jQuery.each(formData, function(i, field) {
    data[field.name] = field.value;
});

在上面的示例中,field.name"apple",具有不同的值,例如"type1""type2"

field.name中与jQuery.each相同的情况下,使用我当前的代码,我已删除/擦除了"apple":"type1"

1 个答案:

答案 0 :(得分:1)

这不是jQuery的问题,而是与javascript中对象的性质有关。您不能在同一个键上存储多个值(如何访问它们?)。

您可以做的是将一个数组存储在键上,然后添加:

const formData = jQuery('input');
let data = {};

jQuery('button').click(function() {
  data = {}
  jQuery.each(formData, function(i, field) {
    data[field.name] = data.hasOwnProperty(field.name)
      ? [...data[field.name], field.value]
      : [field.value]
  });
  
  console.dir(data);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input name="a" />
<input name="b" />
<input name="b" />
<button>Test</button>

以上代码的作用是对键使用一个数组,并为每个项目添加到该数组中。

您可以在没有jQuery且没有each的情况下执行此操作,您可能会或可能不会喜欢此选项:

const button = document.querySelector('button');
const getAll = selector => Array.prototype.slice.call(
  document.querySelectorAll(selector)
);

let data = {};

button.onclick = () => {
  data = getAll('input')
    .reduce((result, element) => ({
      ...result,
      [element.name]: result.hasOwnProperty(element.name)
        ? [...result[element.name], element.value]
        : [element.value]
    }), {})
    
  console.dir(data)
}
<input name="a" />
<input name="b" />
<input name="b" />
<button>Test</button>