我正在使用JQuery创建2个数组和1个对象。一个数组包含用户输入的名称(使用多种形式),另一个数组包含分配给这些名称的数字(使用下拉按钮)。使用名称作为键,使用数字作为值来生成对象。
我遇到的问题是,在最终对象中,似乎删除了初始数组中的所有重复项。在此文本下方列出的是我收到的JSON输出。
(3)[“” jennifer“,” jennifer“,” michelle“] -名称的Console.log()看起来不错
(3) [1、3、2] -数字的Console.log()看起来不错
{jennifer:3,michelle:2} -当对象应为2时,该对象仅包含Jennifer之一。
{jennifer:1,jennifer:3,michelle:2} -这是输出的样子。我的代码在下面列出。
// Gather the names that were entered and dump them into an array
var names = $("input[name='name']")
.map(function() {
return $(this).val();
}).get();
// Gather the access level assigned to those names and dump them into an array.
var accessLevel = $("button[name='options']").map(function() {
return $(this).text();
}).get();
// Create an object containing the key [name] value [access level] pairs
var result = {};
names.forEach((key, i) => result[key] = accessLevel[i]);
谢谢大家的帮助!
答案 0 :(得分:5)
对象是唯一属性的集合,如果您的键(?)不是唯一的(则不是真正的键),则它们不适用。请注意,即使您这样做:
var result = {jennifer: 1, jennifer: 3, michelle: 2};
...结果仍然是:
{jennifer: 3, michelle: 2}
对于您的情况,您可以将两个数组合并为一个数据结构,如下所示:
// Create an array containing the key [name] and value [access level] pairs
var result = names.map((name, i) => ({ name, accessLevel: accessLevel[i]}));
这将产生:
[
{ name: "jennifer", accessLevel: 1 },
{ name: "michelle", accessLevel: 2 },
{ name: "jennifer", accessLevel: 3 }
]
答案 1 :(得分:0)
在一个对象中不能有两个相同的键。这不是对象的工作方式。也许您想做的就是让对象中的每个键都是一个数字数组:
{ jennifer: [0, 2], jan: [1] }