【发布时间】:2014-02-04 10:19:59
【问题描述】:
我在 js 中有一个简单的数组
var fruit = [ 'apple' , 'apple' , 'orange' ]
我需要这个摸索,以便我可以以格式呈现数据:
apple 2
orange 1
我尝试过创建两个数组,但都失控了。
【问题讨论】:
-
向我们展示您已经尝试过的内容。
标签: javascript
我在 js 中有一个简单的数组
var fruit = [ 'apple' , 'apple' , 'orange' ]
我需要这个摸索,以便我可以以格式呈现数据:
apple 2
orange 1
我尝试过创建两个数组,但都失控了。
【问题讨论】:
标签: javascript
你可以用减少来简洁地做到这一点:
function count(xs) {
return xs.reduce(function(a,e) {
return a[e] = ++a[e]||1, a;
},{});
}
count(fruit); //=> {apple:2, orange:1}
【讨论】:
reduce,但后来我看到了那一小段美...
您可以迭代 fruit 值并增加一个计数器:
var result = {};
for (var i = 0, n = fruit.length; i < n; i++) {
if (typeof result[fruit[i]] === 'undefined') {
result[fruit[i]] = 1;
} else {
result[fruit[i]]++;
}
}
console.log(result); // Object {apple: 2, orange: 1}
【讨论】:
这是一种方法:
var fruit = ['apple', 'apple', 'orange'];
var occurences = {};
for (var index = 0; index < fruit.length; index++) {
var value = fruit[index];
occurences[value] = occurences[value] ? occurences[value] + 1 : 1;
}
console.log(occurences);
记录的输出是一个包含 apple: 2, orange: 1} 的对象,您可以在此处看到:http://jsfiddle.net/zZ2hk/
【讨论】:
var fruits = [ 'apple' , 'apple' , 'orange' ];
var result = {};
for(var i = 0; i < fruits.length; i++){
var item = fruits[i];
result[item] = result[item] ? result[item] + 1 : 1;
}
console.log(result); // Object { apple=2, orange=1}
【讨论】:
试试下划线countBy函数:
var fruit = [ 'apple' , 'apple' , 'orange' ];
var count = _.countBy(fruit, function(el) {
return el;
});
它还有其他非常有用的功能。
【讨论】:
var fruit = [ 'apple' , 'apple' , 'orange' ];
var counts = {};
for(var i =0; i < fruit.length;i++){
counts[fruit[i]] = (counts[fruit[i]]) ? counts[fruit[i]] + 1:1;
}
JS 小提琴: http://jsfiddle.net/FuXMu/2
【讨论】: