for (var i in data) {
if (interimArray.indexOf(data
[i]
.id) > -1) {
console.log(`${data
[i]
.id}已经存在,计数加1`, `count为${count}`)
for (var j in resultArray) {
if (resultArray
[j]
.
id
=== data[i].id) {
count++
resultArray
[j]
.
count
= count
} else {
count
=
1
console.log(`${data
[i]
.id}不存在,数组加入${data
[i]
.id}`, `count重置为${count}`)
interimArray.push(data
[i]
.id)
data
[i]
.
count
= count
resultArray.push(data
[i]
)
console.log(JSON.stringify(resultArray, null, 2))
第二种解决办法为将id当键值,判断该键值是否存在,在去取value成数组
let result = {}
for (let i = 0, len = data.length
let dataArr = data[i]
if (result[dataArr.id]) {
result[dataArr.id].count ++
} else {
result[dataArr.id] = { ...dataArr, count: 1 }
let resultArr = []
for (const key in result) {
resultArr.push(result[key])
console.log(JSON.stringify(Object.values(result), null, 2))
第三种类似于第二种只不过是利用Object.entries将第二种对象转为二维数组
// reduce的4个参数 prev, cur, index, arr
var twoDimensionalArray = Object.entries(data.reduce((prev, cur) => {
if (!prev[cur.id]) {
prev[cur.id] = {
...cur,
count: 1
} else {
prev[cur.id].count += 1
return prev
}, {}))
var result = twoDimensionalArray.map(entry => entry[1])
console.log(JSON.stringify(result, null, 2))
第四种是用reduce方法对第一种方法进行精简
let result = data.reduce((obj, item) => {
let find = obj.find(i => i.id === item.id)
let _d = {
...item,
count: 1
find ? find.count++ : obj.push(_d)
return obj
}, [])
console.log(JSON.stringify(result, null, 2))
复制代码
麻雀虽小,五脏俱全,一个题目考察点有数组的去重,Set,reduce,Object.keys(),Object.values(),Object.entries,二维数组,循环的三种方法:map、for、reduce等等