我需要使用重复的键名称(如下一个)创建一个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"
答案 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>