我无法将数组值保存到组中:
我有一个这样的数组:
["0", "2", "8", "8", "8", "8", "8", "8", "2", "9", "9", "9", "9", "9", "2", "10", "10", "10", "10", "10", "10", "10", "10", "0", "3", "11", "11",.....]
我需要的是将值分组并保存到这样的对象:
{0 = 1, 2 = 1, 8 = 6, 2 = 1, 9 = 5, 2 = 1, 10 = 9, 0 = 1,...}
我尝试了几种但没有运气
var max = 0;
var group = {};
for (var i = items.length; --i >= 0; ) {
var value = items[i];
var n = group[value] = 1 - -(group[value] | 0);
if (n > max) {
max = n;
}
}
这个返回所有求和值,如:{0=6, 2=7,...}
这也给我错误的结果:
var j = 1,
value = 0,
valueArray = {};
for (i = 0; i <= items.length; i++) {
if (value == items[i]) {
j++;
} else {
valueArray[j] = value;
j = 1;
}
value = items[i];
}
有任何建议吗?
答案 0 :(得分:2)
使用此...
var values = ["0", "2", "8", "8", "8", "8", "8", "8", "2", "9", "9", "9", "9", "9", "2", "10", "10", "10", "10", "10", "10", "10", "10", "0", "3", "11", "11"]
var counts = {};
_.each(values, function(v, i) {
if (counts[v]) {
counts[v] ++;
} else {
counts[v] = 1;
}
});
console.log(counts);
在这里工作... http://jsfiddle.net/B8uy3/
答案 1 :(得分:1)
我认为你在JS中想要实现的是不可能的 - 根据你所写的,你的输出对象会有两个值为0的键(或三个值为2的键)
什么是可能的,确实是分组,但不是根据你提供的输出:
var input = ["0", "2", "8", "8", "8", "8", "8", "8", "2", "9", "9", "9", "9", "9", "2", "10", "10", "10", "10", "10", "10", "10", "10", "0", "3", "11", "11"];
var output = [];
for (var i=0; i<input.length; i++)
{
if (!output[output.length-1] || output[output.length-1].value != input[i])
output.push({value: input[i], times: 1})
else
output[output.length-1].times++;
}
console.log(output);
小提琴:http://jsfiddle.net/UCbkz/
在输出数组中,您最终会得到输入数组中的数字组,因此:
答案 2 :(得分:0)
您可以使用:
var arr= ["0", "2", "8", "8", "8", "8", "8", "8", "2", "9", "9", "9", "9", "9", "2", "10", "10", "10", "10", "10", "10", "10", "10", "0", "3", "11", "11"];
var newObj = {}
for(var i = 0; i < arr.length; i++){
newObj[arr[i]] = ++newObj[arr[i]] || 1;
}
console.log(newObj);
答案 3 :(得分:0)
基于Trent答案的原生Javascript解决方案:
var values = ["0", "2", "8", "8", "8", "8", "8", "8", "2", "9", "9", "9", "9", "9", "2", "10", "10", "10", "10", "10", "10", "10", "10", "0", "3", "11", "11"]
var counts = {};
values.forEach(function (v) {
if (counts[v]) counts[v]++;
else counts[v] = 1;
});