比如有一个数组[4,4,3,3,7,7,7,5,5,5], 怎样把有两个相同的元素放到一个新数组,有三个相同元素放到另外一个数组?
const arr = [4,4,3,3,7,7,7,5,5,5]
const cache = {}
const result1 = []
const result2 = []
arr.forEach(v => {
if (cache[v] === undefined) {
cache[v] = 1
} else {
cache[v] += 1
}
})
for (let key in cache) {
if (cache[key] === 2) {
result1.push(key)
} else if (cache[key] === 3) {
result2.push(key)
}
}
console.log(result1)
console.log(result2)
基本思路用map统计每个数字出现的次数,然后去循环这个map。
var array = [4,4,3,3,7,7,7,5,5,5];
var map = {};
for (var i=0;i<array.length;i++) {
console.log(array[i]);
if (typeof(map[array[i]])=="undefined") {
map[array[i]] = 1;
} else {
map[array[i]] = map[array[i]] + 1;
}
}
for (var i in map) {
console.log("数字"+i+"有"+map[i]+"个");
}
统计成员出现的次数,reduce
很方便
统计各个数据出现的次数,并返回一个对象
let arr = [4, 4, 3, 3, 7, 7, 7, 5, 5, 5, 6, 8, 8, 8, 8, 9, 12, 11, , 9, 9];
let obj = arr.reduce((prev, curr) => {
if (prev[curr]) {
prev[curr] = prev[curr] + 1;
} else {
prev[curr] = 1;
}
return prev;
}, {});
obj
是一个对象
{"3":2,"4":2,"5":3,"6":1,"7":3,"8":4,"9":3,"11":1,"12":1}
根据统计的数据去整理
//收集次数 numArr这里是[2,3,1,4]
let numArr = [...new Set(Object.values(obj))];
let numObj = numArr.map((v, i) => {
let sameArr = [];
for (let [value, item] of Object.entries(obj)) {
if (v == item) {
sameArr.push(value)
}
}
return {
time: v,//出现次数
item: sameArr,//出现改次数的元素
}
})
最后得到
numObj
[
{
"time": 2,
"item": ["3","4"]
},
{
"time": 3,
"item": ["5","7","9"]
},
{
"time": 1,
"item": ["6","11","12"]
},
{
"time": 4,
"item": ["8"]
}
]
var arr = [4,4,3,3,7,7,7,5,5,5];
var numObj = arr.reduce(function(prev,curr){
if(!prev[curr]){
prev[curr] = 1;
}else{
++prev[curr]
}
return prev;
},{})
var double = [];
var triple = [];
for(var i in numObj){
if(numObj[i] == 2){
double.push(+i);
}else{
triple.push(+i);
}
}
console.log(double,triple)
13 回答12.9k 阅读
7 回答2k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决