将元素添加到for循环中的对象中

Adding an element to an object in a for loop

本文关键字:对象 循环 for 元素 添加      更新时间:2023-09-26

我想用字符串的游程编码来填充对象。使用数组通常很简单,但我不太确定该如何处理对象。

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}

对于字符串中的每个字符,您希望将该字符的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}