这是我的阵列:
['California','Texas','Texas','Texas','New York','Missouri','New Mexico','California']
在lodash中是否有办法将其转换为具有重复出现次数的对象,如下所示:
[
{'name':'California', 'count':2},
{'name':'Texas', 'count':3},
{'name':'New York', 'count':1},
{'name':'Missouri', 'count':1},
{'name':'New Mexico', 'count':1},
]
我尝试了很多组合,但没有成功。文档:https://lodash.com/docs#countBy
答案 0 :(得分:4)
您只需映射_.countBy
的结果。
var array = ['California','Texas','Texas','Texas','New York','Missouri','New Mexico','California'],
count = _.countBy(array),
result = _.map(count, (v, k) => ({ name: k, count: v }));
console.log(count);
console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
结合_.chain
var array = ['California','Texas','Texas','Texas','New York','Missouri','New Mexico','California'],
count = _
.chain(array)
.countBy()
.map((v, k) => ({ name: k, count: v }));
console.log(count);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
&#13;
答案 1 :(得分:1)
您可以使用reduce()
var ar = ['California','Texas','Texas','Texas','New York','Missouri','New Mexico','California'];
var obj = {}
var result = ar.reduce(function(r, e) {
if(!obj[e]) {
obj[e] = {name: e, count: 0};
r.push(obj[e])
}
obj[e].count++;
return r;
}, [])
console.log(result)
&#13;
答案 2 :(得分:0)
我不确定是否有内置函数可以实现它,但您可以使用标准方法来完成。
var arr = ['California', 'Texas', 'Texas', 'Texas', 'New York', 'Missouri', 'New Mexico', 'California'];
var obj = [];
arr.forEach(a => {
var b = obj.find(b => b.name == a);
if(!b){
obj.push({
name: a,
count: 1
});
}else{
b.count++;
}
});
console.log(JSON.stringify(obj, null, 2));
答案 3 :(得分:0)
正如你所说的那样,countBy函数,你必须映射结果以根据需要设置格式:
var result = _( array )
.countBy( )
.map( ( key, value ) => ( { name: key, count: value } ) )
.value( )
console.log( result );
答案 4 :(得分:0)
在普通的Javascript中,您可以使用Array#forEach
。
var data = ['toString', 'California', 'Texas', 'Texas', 'Texas', 'New York', 'Missouri', 'New Mexico', 'California'],
count = [];
data.forEach(function (a) {
if (!this[a]) {
this[a] = { name: a, count: 0 };
count.push(this[a]);
}
this[a].count++;
}, Object.create(null));
console.log(count)
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
带有{}
var data = ['toString', 'California', 'Texas', 'Texas', 'Texas', 'New York', 'Missouri', 'New Mexico', 'California'],
count = [];
data.forEach(function (a) {
if (!this[a]) {
this[a] = { name: a, count: 0 };
count.push(this[a]);
}
this[a].count++;
}, {}); // no Object.create(null)!
console.log(count)
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 5 :(得分:0)
var arr = ['California','Texas','Texas','Texas','New York','Missouri','New Mexico','California'],
lut = arr.reduce((p,c) => p[c] ? (p[c]++ ,p) : (p[c] = 1, p),{});
result = Object.keys(lut).map(k => ({name:k,count:lut[k]}));
console.log(result);
&#13;