使用循环将值设置为可动态创建的对象

时间:2019-03-06 23:29:24

标签: javascript

我从一个大字符串的字母创建了一个数组。现在,我想创建一个对象,该对象说明该字母在数组中重复多少次,但找不到解决方案,请帮我一下。

这是我到目前为止所做的:

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 ..
    }
  }
}

3 个答案:

答案 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() MDNArray.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 )


  • Array.from(String)会将字符串转换为Array。
  • 无需删除空格,以后可以使用对象delete
  • reduce将遍历数组,将其“减少”为对象{}
  • 内部逻辑ob[c] = ++ob[c] || 1;仅使用值1实例化属性,否则将其递增。