从数组中分配键名

assigning a key name from an array

我似乎无法使键等于传入的名称数组的索引值的名称。

我想做什么:

创建名称和数字的键值以跟踪我有多少重复名称。

input/output:

姓名 = [鲍勃、乔、吉尔、鲍勃、比尔、比尔]

输出将是 {bob:2, joe:1, jill:1, bill:2}

我还没有接触到这部分代码。目前只是想把钥匙弄好。但它应该描绘出我正在尝试做的事情。

我遇到的问题:

我似乎无法为我的集合中的每个名字创建密钥

我最初做了什么:

myset.add({names[i]:0})

我将其更改为一个名为 keyname 的变量,该变量正在我的 forloop 下分配。

这没有任何改变。


function solution(names) {
    const myset = new Set();
    for(let i=0; i<names.length; i++){
        let keyname = names[i];
        if(myset.has(names[i])){
            console.log("already includes");
        }
        else(
            myset.add({
                keyname:0
            })
        )
    }
    console.log(myset);
}

控制台:

Set(5) {
  { keyname: 0 },
  { keyname: 0 },
  { keyname: 0 },
  { keyname: 0 },
  { keyname: 0 }
}

Set 只是唯一值的集合。如果您要添加一个对象,那么它将不等于任何其他对象,除非两者在引用上不同。

Set objects are collections of values. You can iterate through the elements of a set in insertion order. A value in the Set may only occur once; it is unique in the Set's collection.

如果您只需要计算字符串的出现次数,那么您可以使用普通对象或 Map 来执行此操作:

function solution(names) {
  const dict = {};
  
  for (let i = 0; i < names.length; ++i) {
    if (!dict[names[i]]) dict[names[i]] = 1;
    else ++dict[names[i]];
  }

  console.log(dict);
}

solution(["bob", "joe", "jill", "bob"]);

function solution(names) {
  const map = new Map();
  names.forEach((name) =>
    !map.has(name) ? map.set(name, 1) : map.set(name, map.get(name) + 1)
  );
  console.log(map);
}

solution(["bob", "joe", "jill", "bob"]);

尝试使用Javascript中的对象。它可以存储 key/value 对。

function solution(names) {
    // javascript object
    const values = {};

    for(let i = 0; i < names.length; i++){
        if(values[names[i]]){             
           values[names[i]] = 1;
        }else{
           values[names[i]] += 1;
        }
    }
    console.log(values);
}