动态增加Javascript对象成员

Increment Javascript object member dynamically

本文关键字:成员 对象 Javascript 增加 动态      更新时间:2023-09-26

本质上,我希望函数读取字符串中的所有字母,并为每个字母吐出一个包含{'letter', 'count'}属性的对象。

function freqLetters(string) {
  var freq = [];
  for (var i = 0; i < string.length; i++) {
    var character = string.charAt(i);
    if (typeof freq[character] != undefined) {
      freq[character].count++;
    } else {
      freq.push({'letter': character, 'count': 1});
    }
  }
  return freq;
}

然而,freq通常看起来是空的,当它工作时,它似乎总是无法通过'!=== undefined'检查并推送计数为1的重复字母,而不是找到它们并递增它们。

typeof freq[character] !=== undefined]检查是否正确?

我究竟是如何增加动态元素的?

(即,如果存在,则查找字母:a,如果存在则将其计数增加1)

函数式编程。

var counts = string
    .split('') // Get individual letters.
    .reduce((acc, letter)=> {
        // acc is an object (passed in as second arg to reduce).
        // we use the existing value for the letter (default to 0) and add one each time.
        acc[letter] = (acc[letter] || 0) + 1
        return acc
    }, {})

编辑:意识到您想要一个数组或{letter:count}个对象。

var countsList = Object
    .keys(counts)
    .map((key)=> ({ [key]: counts[key] }))

如果您想检查字母的存在,不要使用数组对象。因为push函数添加了由数字(0,1,2)索引的元素,所以freq[character]总是未定义的。

对于您的报喜:

var freq = {};

在您的其他:

freq[character] = {'letter': character, 'count': 1}

在你的if中,检查一下是否存在:

if (freq[character]) {... }

您可以使用以下代码:

function countCharacters(exampleString){
var countObject = {} ; 
for (var i = 0, l = exampleString.length; i < l; i++) {
    var currentChar =  exampleString.charAt(i);
    if(typeof(currentChar) != undefined) {
        countObject[currentChar] = characterCount(exampleString, currentChar);
    }
}
console.log(countObject);
return(countObject); }

function characterCount(word, character) {
   var count = 0;
    for (var i = 0; i < word.length; i++) {
       if (word[i] === character) {
           count++;
       }
  }
  return count; }

希望有帮助:)