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

匹配数组中的 3 个或更多相同元素并将它们添加到列表中

匹配数组中的 3 个或更多相同元素并将它们添加到列表中

拉丁的传说 2021-12-23 19:36:53
我试图在数组中找到 3 个或更多匹配项,但它只匹配前 3 个,而没有匹配数组的其余部分。如果有人可以提供帮助会很棒:)var grid =  [2,2,2,5,5,5,3,3,3,3];checkResults();function checkResults(){    var list_matches = []; // store all matches found    var listcurrent = []; // store current      var maxitems = 3;    var last = -1; // last cell    for(let j =0; j < grid.length; ++j){        let item = grid[j];         // check if last is null        if(last == -1){            //  add first item            listcurrent.push(item);            last = item;            console.log("Added: "+item);            continue;        }        let wasMatch = false;        // check match        if(item == last){            wasMatch = true;            listcurrent.push(item);            last = item;            console.log("Added Match: "+item);        }         if(!wasMatch){            console.log("Not matched: " + item);            if(listcurrent.length >= maxitems){                list_matches.push(listcurrent);             }            // reset to null            last = -1;             listcurrent = [];        }    }    console.log(list_matches);    console.log("Cols: " + grid.length);}预期结果:来自 [2,2,2,5,5,5,3,3,3,3];0: 2221:5552:3333当前输出是:0:222,就是这样
查看完整描述

3 回答

?
慕妹3242003

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

您可以使用一个临时数组来收集相同的值,如果长度具有所需的最小长度,则推送此数组。


function getMore(array, min) {

    var result = [],

        temp;


    array.forEach((v, i, a) => {

        if (v !== a[i - 1]) return temp = [v];

        temp.push(v);

        if (temp.length === min) result.push(temp);

    });

    return result;

}


console.log(getMore([2, 2, 2, 5, 5, 5, 3, 3, 3, 3], 3));


查看完整回答
反对 回复 2021-12-23
?
catspeake

TA贡献1111条经验 获得超0个赞

使用 Array.prototype[reduce/map/filter] 的另一种解决方案


const someArray = [2, 2, 2, 5, 5, 5, 3, 3, 3, 3, 9, 9];

console.log(aggregate(someArray));


function aggregate(arr) {

  return arr

    // retrieve unique values

    .reduce((acc, val) => !acc.includes(val) && acc.concat(val) || acc, [])

    // use unique values to map arr values to strings 

    // if number of matches >= 3

    .map(val => {

      const filtered = arr.filter(v => v == val);

      return filtered.length > 2 ? filtered.join("") : false

     })

     // filter non falsy values

     .filter(val => val);

}


查看完整回答
反对 回复 2021-12-23
?
慕妹3146593

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

你可以做这样的事情:


var grid = [ 1, 1, 2, 3, 4, 5 ];

var hashMap = {};



for( var i = 0; i < grid.length; i++ ) {



  if( hashMap.hasOwnProperty( grid[i] ) ) {

    hashMap[ grid[i] ]++;

  } else {

    hashMap[ grid[i] ] = 1;

  }


}


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信