のおかげであなたは削減での作業右のトラックに間違いだが、私は2つの異なる段階
let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}];
const pairs = o=> Object.keys(o).map(k=> [k, o[k]])
let count = c.reduce((acc, {name}) => {
if (acc[name] === undefined)
return Object.assign(acc, { [name]: 1 })
else
return Object.assign(acc, { [name]: acc[name] + 1 })
}, {})
var result = pairs(count).map(([name, occurences]) => ({name, occurences}))
console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]
あなたでし抽象これらの行動に計算を分けるだろうこのような異なる機能にする
// convert an object to [[key,value]] pairs
const pairs = o=> Object.keys(o).map(k=> [k, o[k]])
// count unique instances of a property value in an array of objects
const countBy = (prop, xs)=> {
return xs.reduce((acc, x)=> {
let y = x[prop]
if (acc[y] === undefined)
return Object.assign(acc, { [y]: 1 })
else
return Object.assign(acc, { [y]: acc[y] + 1 })
}, {})
}
// your data
let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}]
// then chain it all together
let result = pairs(countBy('name', c)).map(([name, occurences]) => ({name, occurences}))
console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]
ES6も計算のこの種を行うためのかなり良いですMap
を提供しています。
このコードは、私に少し良く読んで、意味的にはもう少し正しいものです。私たちの以前のコードはまったく同じことをしていました、ただそれは普通のオブジェクトを使っていました。 Map
は、このkey->value
データ用に特別に設計されたデータ構造であるため、Mapをより良い選択にします。
唯一の問題は、コードベースで何らかの方法でマップが使用されていない場合に、これを導入することが間違っている可能性があることです。
// convert a Map to an array of pairs
const mpairs = m=> [...m.entries()]
// countBy this time uses Map
const countBy = (prop, xs)=> {
return xs.reduce((m, x)=> {
let y = x[prop]
if (m.has(y))
return m.set(y, m.get(y) + 1)
else
return m.set(y, 1)
}, new Map)
}
// your data
let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}]
// then chain it all together
let result = mpairs(countBy('name', c)).map(([name, occurences]) => ({name, occurences}))
console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]
あなたは試みを投稿することを忘れていましたか? – Li357
@AndrewL。ありがとう! –
@ mike-cそれは私のjsfiddleで今実行されているようです.. –