嗨,我有一个简单的问题
我正在尝试创建一个带字符串输入"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”
答案 0 :(得分:2)
更好的方法是先创建一个对象,然后再使用它创建数组结构。您也可以在此处使用 reduce()
方法。
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;
仅使用简单的for loop
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;