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);
对数组进行排序,然后每次达到不同的值时创建一个新数组。这可能是最简单的方法