Javascript 检查数组的某些元素是否相等

Javascript 检查数组的某些元素是否相等,javascript,arrays,frontend,Javascript,Arrays,Frontend,如果所有元素都相等,我只发现了一个问题。这不适合我,我需要另一件事:扫描数组并获取相等的元素,然后将它们推到另一个数组中 样本输入: arr = [1, 3, 3, 1] 样本输出: group = [[1,1],[3,3]] 这是我的密码: arr = [1, 3, 3, 1]; group = []; pickNums = (a,b) => { ... ? group.push([a]) : null arr.reduce(pickNums); 我不知道该写什么来代替。。。。

如果所有元素都相等,我只发现了一个问题。这不适合我,我需要另一件事:扫描数组并获取相等的元素,然后将它们推到另一个数组中

样本输入:

arr = [1, 3, 3, 1]
样本输出:

group = [[1,1],[3,3]]
这是我的密码:

arr = [1, 3, 3, 1];
group = [];

pickNums = (a,b) => {
... ? group.push([a]) : null

arr.reduce(pickNums);
我不知道该写什么来代替。。。。你有什么想法吗?

你可以把所有的价值观归为一组

变量数组=[1,3,3,1], groups=Array.from 大堆 .reducem,v=>m.setv,[…m.getv | |[],v],新映射 价值观 ;
控制台。日志组 使用将项目收集到字典中,然后使用转换回数组:

常数arr=[1,3,3,1]; pickNums=arr=> Object.valuesarr.reducer,n=>{ r[n]=r[n]| |[]; r[n].pushn; 返回r; }, {}; 常量组=pickNumsarr;
控制台。日志组 听起来,通过使用对象/散列保留类似元素的计数器,可以最佳地解决这个问题

const array = [1, 3, 3, 1];
const elementCounterObject = {};
array.map(element => {
   if (!elementCounterObject[element]) {
       elementCounterObject[element] = 1;
   } else {
       elementCounterObject[element] += 1;
   }
});

console.log(elementCounterObject);   // result: {1: 2, 3: 2}

// converting elementCounterObject to display output as per requirement
const resultingArrayToDisplay = [];

for (let element in elementCounterObject) {
    const numberOfInstances = elementCounterObject[element];
    const elementToNumberOfInstanceArray = new Array(numberOfInstances).fill(parseInt(element));
    resultingArrayToDisplay.push(elementToNumberOfInstanceArray);
};

console.log(resultingArrayToDisplay); // result: [[1,1], [3,3]]

我把这个片段写得很详细,这样你就可以理解它背后的算法了。为了简洁起见,显然可以去掉一些绒毛,但我希望这能解决您的问题

这就是您想要的:

    const arr = [1, 3, 3, 1];
    let groups = [];
    arr.map((item)=>{
          const ar2 = arr.filter( sec => sec == item );
          if (! groups.filter( sec => sec.indexOf(item)>-1).length) {
            groups.push(ar2);
          }
     });

    console.log(groups);

对数组进行排序,然后每次达到不同的值时创建一个新数组。这可能是最简单的方法