【问题标题】:Adding an element to an object in a for loop在 for 循环中向对象添加元素
【发布时间】:2014-04-24 01:35:57
【问题描述】:

我想用字符串的运行长度编码填充一个对象。使用数组这通常很简单,但我不太确定要为对象做什么。

function addto (string) {  
   var string = string.split("").sort();
   var cnt = 1;
   var obj = {};

   for (i = 0; i < string.length; i ++) {
     if (string[i] === string[i+1])
       cnt++;

   }

   return obj;
}

addto("abbccc");

现在显然我不能在这里使用像 push() 这样的方法。但我也无法将对象名称设置为我喜欢的位置的字符串:

obj.string[i] = cnt;

这是我最初希望做的。有没有合适的方法来做到这一点,这样我的输出将是(对于给出的例子):

{"a":1, "b":2, "c":3}

【问题讨论】:

    标签: javascript object for-loop


    【解决方案1】:

    对于字符串中的每个字符,您希望为该字符增加一次obj 计数器。这是朝着正确方向的推动。

    var obj = {};
    for (i = 0; i < string.length; i ++) {
      // If the character has not been seen yet, set its counter to 0.
      obj[string[i]] = obj[string[i]] || 0;
      // Increment that character's count once.
      obj[string[i]]++;
    }
    

    注意,使用这个方向,不需要事先对数组进行排序。

    这是另一种选择。如果您将此作为课程作业,请不要使用它。但作为一种心理锻炼,我留下了解决方案:

    var str = "abbccccddeeeeefgh"
    var matches = str.match(/(.)\1*/g);
    // matches = ["a", "bb", "cccc", "dd", "eeeee", "f", "g", "h"]
    var counts = {};
    for (i in matches)
      counts[matches[i][0]] = matches[i].length;
    // counts = Object {a: 1, b: 2, c: 4, d: 2, e: 5, f: 1, g: 1, h: 1}
    

    【讨论】:

    • 谢谢乔,这正是我想要的,我会尽快接受!
    猜你喜欢
    • 2019-12-31
    • 2020-03-20
    • 2022-07-29
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多