代码之家  ›  专栏  ›  技术社区  ›  jgrewal

增加集合(如果存在)

  •  1
  • jgrewal  · 技术社区  · 3 年前

    我有一个字符串“abacabad”作为 s

    我想做的是:

    • 创建一个新集合
    • 把每一个字母从头到尾读一遍。如果该字母存在,我将其递增1
    • 如果它不存在,我们通过将其初始化为1来创建该集

    我的代码记录的内容:

    集合(0){a:1,b:1,c:1,d:1}


    function solution(s) {
      arr = new Set()
      for (e of s) {
        if (e in arr) {
          arr[e]++;
        }
        if (arr.has(e) == false) {
          arr[e] = 1;
        }
      }
      console.log(arr)
    }
    
    solution('abacabad');
    2 回复  |  直到 3 年前
        1
  •  2
  •   plalx    3 年前

    A. Set Map (键/值)存储。

    代码中有很多问题,所以我不会一一列举,但您只是没有使用正确类型的对象,然后是混合API,特别是定义与实际对象混合的对象的键 设置

    function solution(s) {
      const countByChar = new Map();
      for (char of s) {
        const count = countByChar.get(char) || 0;
        countByChar.set(char, count + 1);
      }
      return countByChar;
    }
    
    const countByChar = solution('abacabad');
    
    console.log(Array.from(countByChar.entries()));
        2
  •  1
  •   CertainPerformance    3 年前

    您正在合并两种不同的数据结构:

    • 价值观 (例如 ('a, 'b', 'c', 'd')
    • 对象,它们是键值对的集合(例如 { a: 1, b: 2 } )

    集合方法包括 .has .add 。但集合也是对象,因此您也可以对其使用标准对象属性指定- 但你不应该 arr[e] = ),但您使用的是Set方法 添加 has 添加 ,因此您的集合永远不会得到任何值。

    function solution(s) {
      const obj = {};
      for (const char of s) {
        obj[char] ??= 0;
        obj[char]++;
      }
      console.log(obj);
    }
    
    solution('abacabad');

    如果您想要一张地图:

    function solution(s) {
      const map = new Map();
      for (const char of s) {
        map.set(
          char,
          (map.get(char) || 0) + 1
        );
      }
      console.log([...map.entries()]);
    }
    
    solution('abacabad');