【问题标题】:javascript leave max 3 occurrences of the same obj in an arrayjavascript 在数组中保留最多 3 次相同的 obj
【发布时间】:2019-07-16 13:30:52
【问题描述】:

如果我像这样填充一对数组(在 get json 中):

var arrItems = [];
for (let y=0; y<50 ;y++){
    var titl = data.item[y].name;
    var img = data.item[y].image[0].url;
    arrItems.push({t:titl,i:img});
}

然后我怎样才能过滤它以只留下 value 相同的 3 对?

示例:

arrItems = [
    {t:one,i:square.jpg},
    {t:two,i:square.jpg},
    {t:three,i:square.jpg},
    {t:four,i:square.jpg},
    {t:five,i:triangle.jpg}
];

变成

arrItems = [
    {t:one,i:square.jpg},
    {t:two,i:square.jpg},
    {t:three,i:square.jpg},
    {t:five,i:triangle.jpg}
];

JavaScript 或 jQuery 都可以。

【问题讨论】:

    标签: javascript jquery arrays object filter


    【解决方案1】:

    你可以使用reduce函数

        var arrItems = [
            {t:'one',i:'square.jpg'},
            {t:'two',i:'square.jpg'},
            {t:'three',i:'square.jpg'},
            {t:'four',i:'square.jpg'},
            {t:'five',i:'triangle.jpg'}
        ];
    
        var output = arrItems.reduce((acc, {t,i})=>{
            acc['mem'][i] = (acc['mem'][i] || 0) + 1;
            acc['mem'][i] <= 3 ? acc['output'].push({t, i}) : ''; 
            return acc;
        }, {'mem':{}, 'output':[]});
    
    console.log(output);
    

    【讨论】:

      【解决方案2】:

      可能有一些更有效的方法来编写它,但我认为最容易理解的是简单的计数迭代:

      var counts = {};
      for (var i = 0; i < arrItems.length; i++) {
          var item = arrItems[i];
          var count = counts[item.i] || 0;
          if (count >= 3) {
              arrItems.splice(i, 1);
              i--;
          } else {
              counts[item.i] = ++count;
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以获取一个哈希表并计算所需属性的出现次数并使用最大值进行过滤。

        var items = [{ t: 'one', i: 'square.jpg' }, { t: 'two', i: 'square.jpg' }, { t: 'three', i: 'square.jpg' }, { t: 'four', i: 'square.jpg' }, { t: 'five', i: 'triangle.jpg' }],
            count = {},
            result = items.filter(({ i }) => {
                count[i] = (count[i] || 0) + 1;
                return count[i] <= 3;
            });
        
        console.log(result);
        .as-console-wrapper { max-height: 100% !important; top: 0; }

        【讨论】:

          猜你喜欢
          • 2017-07-14
          • 2022-06-15
          • 2022-03-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多