为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用javascript(过滤器)来计算对象值的频率?

如何使用javascript(过滤器)来计算对象值的频率?

UYOU 2022-10-21 09:32:21
这是我必须从中获取数据的url。我想要 postIds 的频率。我如何使用方法(map、filter 或 reduce)来做到这一点。我已经使用循环完成了。可以在更好的方法?请帮助..<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head><body>    <script>  fetch('http://jsonplaceholder.typicode.com/comments')  .then(    function(response) {      if (response.status !== 200) {        console.log('Looks like there was a problem. Status Code: ' +          response.status);        return;      }      response.json().then(function(data)       {          var na=[];          for(var i=1;i<=100;i++)          {            var a= data.filter(ab=> {          return ab.postId==i;});         // console.log(a);           na.push({PostId:i,frequency:a.length});          }          console.log(na);      }  )})  .catch(function(err) {    console.log('Fetch Error :-S', err);  });    </script></body></html>
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

我希望这有帮助


let counterObj = {};


let cars = [

    { id: 1, name: 'Mercedes', year: '2015' },

    { id: 2, name: 'Mercedes', year: '2000' },

    { id: 3, name: 'BMW', year: '2010' },

    { id: 4, name: 'BMW', year: '2004' },

    { id: 5, name: 'Volvo', year: '2012' },

    { id: 6, name: 'Volvo', year: '2014' } 

];



for (let item of cars){

    counterObj[item.name] = 1 + (counterObj[item.name] || 0)

}


console.log(counterObj);


查看完整回答
反对 回复 2022-10-21
?
呼唤远方

TA贡献1856条经验 获得超11个赞

您可以使用其频率reduce生成地图。PostId


function mapFrequency(data) {

     return data.reduce((map, datum) => {

        if (map[datum.postId]) {

          map[datum.postId] += 1;

        } else {

          map[datum.postId] = 1 

        }

        return map;

        

     }, {})

}

此函数将创建一个对象,其键为 as postId,值为其频率。


如果你想在你的样本中生成一个数组,你可以这样做


 const frequencies = mapFrequency(data);

 const result = Object.keys(frequencies).map((id) => {

   return {

      PostId: id, 

      frequency: frequencies[id]

   }

  });


查看完整回答
反对 回复 2022-10-21
?
慕沐林林

TA贡献2016条经验 获得超9个赞

使用 reduce,您可以执行以下操作:


const na = data.reduce((acc, el) => {

  acc[el.postId] = acc[el.postId] ? acc[el.postId] + 1 : 1;

  return acc;

}, {});

与@sonEtLumiere 建议的几乎相同,但与reduce



查看完整回答
反对 回复 2022-10-21
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号