字母计数功能javascript

时间:2016-05-18 01:35:10

标签: javascript

嗨,我有一个简单的问题

我正在尝试创建一个带字符串输入"aacbdgtg"的函数 让它像这样输出一个数组:

[["a", 2], ["c", 1], ["b", 1], ["d", 1], ["g", 2], ["t", 1]]

到目前为止,我已写过

var hist = function(string) {
  var result = [];

  for(var i = 0; i < string.length; i++) {
    if (result.length === 0) {
      result.push([string[i], 1]);
    }
    else {
      for (var j = 0; j < result.length; j++) {
        if (string[i] === result[j][0]) {
          result[j][1]++;
        }
      }
      result.push([string[i], 1]);
    }
  }
  return result;
};

我得到

的结果
[["a", 2], ["a", 1], ["c", 1], ["b", 1], ["d", 1], ["g", 2], ["t", 1], ["g", 1]]

任何帮助都会非常感谢你,因为我卡住并需要帮助,我不知道如何检查数组是否已经有另一个具有相同字母的数组

例如我不知道如何检查[[“a”,2],[“a”,1]] 已经使用了字母“a”

1 个答案:

答案 0 :(得分:2)

更好的方法是先创建一个对象,然后再使用它创建数组结构。您也可以在此处使用 reduce() 方法。

&#13;
&#13;
var hist = function(str) {
  var result = [],
    temp;

  // generate the object which holds string count
  temp = str.split('').reduce(function(a, b) {
    a[b] = a[b] + 1 || 1;
    return a;
  }, {});

  // generate the result using the object
  var result = Object.keys(temp).map(function(v) {
    return [v, temp[v]];
  });

  return result;
};

document.write('<pre>' + JSON.stringify(hist('aacbdgtg')) + '</pre>');
&#13;
&#13;
&#13;
检查旧版浏览器的reduce method polyfill option

仅使用简单的for loop

&#13;
&#13;
var hist = function(str) {
  var result = [],
    temp = {},
    strArr = str.split('');

  // generate the object which holds string count
  for (var i = 0; i < strArr.length; i++) {
    temp[strArr[i]] = temp[strArr[i]] + 1 || 1;
  }

  // generate the result using the object
  var keys = Object.keys(temp);
  for (var i = 0; i < keys.length; i++) {
    result.push([keys[i], temp[keys[i]]]);
  }

  return result;
};

document.write('<pre>' + JSON.stringify(hist('aacbdgtg')) + '</pre>');
&#13;
&#13;
&#13;