我从一个大字符串的字母创建了一个数组。现在,我想创建一个对象,该对象说明该字母在数组中重复多少次,但找不到解决方案,请帮我一下。
这是我到目前为止所做的:
var str = "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo commodi sint fuga autem nobis atque possimus";
var arr = str.split("");
arr.forEach(function(e, i) {
if (e === " ") {
//var index = arr.indexOf(e);
arr.splice(i, 1);
}
});
var obj = {};
var counter = 0;
arr.forEach(function(e, i) {
obj[e] = 1;
});
arr2 = Object.keys(obj);
var counter = 0;
for (let c = 0; c < arr.length; c++) {
for (let b = 0; b < arr2.length; b++) {
if (arr2[b] == arr[c]) { // to find coincidences
count++;
// I'm lost here ..
}
}
}
答案 0 :(得分:3)
您需要为每个字母增加计数器,而不仅仅是将其设置为1
。
最后不需要for
循环或counter
变量。 obj
包含您想要的计数。
var str =
"Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo commodi sint fuga autem nobis atque possimus";
var arr = str.split("");
arr = arr.filter(e => e != " ");
var obj = {};
arr.forEach(function(e) {
if (e in obj) {
obj[e]++;
} else {
obj[e] = 1;
}
// Could also be obj[e] = (obj[e] || 0) + 1
});
console.log(obj);
答案 1 :(得分:0)
作为regex的粉丝,我会提出一个更简短的解决方案:
.gitignore
您可以更改正则表达式const str = 'Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo commodi sint fuga autem nobis atque possimus';
const result = {};
Array.prototype.forEach.call(str.replace(/[^\w]/g, ''), letter => {
if (letter in result) return;
result[letter] = str.match(new RegExp(letter, 'g')).length;
});
console.log(result);
标志以打开/关闭区分大小写。
答案 2 :(得分:0)
使用Array.from() MDN和Array.prototype.reduce MDN:
const str = "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Illo commodi sint fuga autem nobis atque possimus";
const obj = Array.from(str).reduce((ob, c) => {
ob[c] = ++ob[c] || 1;
return ob;
}, {});
delete obj[' ']; // If needed remove data for whitespaces
console.log( obj )
delete
reduce
将遍历数组,将其“减少”为对象{}
ob[c] = ++ob[c] || 1;
仅使用值1
实例化属性,否则将其递增。