仅使用reduce计数数组中出现的字符串不会读取最后一个值

时间:2018-07-28 10:19:54

标签: javascript reduce

我想让程序减少数组中字符串的出现次数。

我应该只使用reduces。

这是我的程序。

function countWords(inputWords) {
  let obj={};
  inputWords.reduce((curr,next )=> {
     obj[curr]=0;
    inputWords.reduce((current,next2)=> {
      if(curr===current) {
        obj[curr]++;
      }
      return next2
    });
    return next;
  })
  return obj
}

我的结果显示

  

我的结果:{锻炼:1,非:1,刺激:1,科莫多:3,天鹅绒:   2,官员:1,秘书:4,劳动:2,est:2,aliquip:1,   excepteur:1,结果:1,梦娜:1,id:1,eiusmod:1,veniam:1,   动画:1,乌拉姆科:1,埃利特:2,空值:1,杯数据:2,偶然:1,   lorem:1,广告:1,quis:1,dolore:1,occaecat:1,aliqua:1,tempor:   1,做:1,做工:1,工作:1}

期望的是:

  

预期结果:{锻炼:1,非:1,刺激性:1,科莫多:3,   天鹅绒:2,公职:1,公职:4,劳力士:2,est:2,aliquip:1,   excepteur:1,结果:1,梦娜:1,id:1,eiusmod:1,veniam:1,   动画:1,乌拉姆科:1,埃利特:2,空值:1,杯数据:2,偶然:1,   lorem:1,广告:1,quis:1,dolore:1,occaecat:1,aliqua:1,tempor:   1,做:1,做工:1,工作:1, amet:1}

以下是输入单词:

  

输入:['exercitation','non','irure','commodo','velit','officia',   'consectetur','commodo','laboris','est','aliquip','excepteur',   'consequat','consectetur','magna','id','eiusmod','veniam',   'anim','consectetur','ullamco','elit','nulla','cupidatat',   'proident','commodo','laboris','est','lorem','consectetur',   'elit','ad','quis','dolore','occaecat','aliqua','cupidatat',   'tempor','do','dolor','velit','labore','amet']

2 个答案:

答案 0 :(得分:1)

可能不需要在另一个reduce方法中使用reduce。 在对象中检查密钥是否存在,如果不存在,则在对象中创建密钥,否则将其值更新1

  ...
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "flow": "flow"
  },
  ...

答案 1 :(得分:1)

您应始终返回减速器内包含频率的对象。初始对象可以是Array.reduce的第二个参数。

因此,这是为您准备的单程纸:

(() => {
  const input = ['exercitation', 'non', 'irure', 'commodo', 'velit', 'officia', 
    'consectetur', 'commodo', 'laboris', 'est', 'aliquip', 'excepteur', 'consequat', 
    'consectetur', 'magna', 'id', 'eiusmod', 'veniam', 'anim', 'consectetur', 
    'ullamco', 'elit', 'nulla', 'cupidatat', 'proident', 'commodo', 'laboris', 'est', 
    'lorem', 'consectetur', 'elit', 'ad', 'quis', 'dolore', 'occaecat', 'aliqua', 
    'cupidatat', 'tempor', 'do', 'dolor', 'velit', 'labore', 'amet'];
  console.log(input.reduce( (f, v) => v in f ? (f[v] += 1, f) : (f[v] = 1, f), {}));
  /* which can also be written as:
    input.reduce( (frequencies, value) => {
      if (frequencies[value]) {
        // frequencies contains the value key, so increment
        frequencies[value] += 1;
      } else {
        // add value to frequencies and initialize ([value] = 1)
        frequencies[value] = 1;
      }
      // return the now updated frequencies object for further use
      return frequencies;
    }, {});
    // ^ the initial frequencies object
  */
})();