正在从我的对象中删除重复项

时间:2018-12-21 22:18:18

标签: javascript jquery

我正在使用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]);

谢谢大家的帮助!

2 个答案:

答案 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] }