Javascript 按组列出的JS组数组值

Javascript 按组列出的JS组数组值,javascript,jquery,Javascript,Jquery,我无法将数组值保存到组中: 我有这样一个数组: ["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,...} 我需要的是将值分组

我无法将数组值保存到组中:

我有这样一个数组:

 ["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,...}
我需要的是将值分组并保存到对象,如下所示:

 ["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];
}
var j=1,
值=0,
valueArray={};
对于(i=0;i使用此

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);        
在这里演奏小提琴…

使用这个

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);        
在这里演奏小提琴…

您可以使用:

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);
var arr=[“0”、“2”、“8”、“8”、“8”、“8”、“8”、“2”、“9”、“9”、“9”、“9”、“2”、“10”、“10”、“10”、“10”、“0”、“3”、“11”、“11”];
var newObj={}
对于(变量i=0;i

您可以使用以下功能:

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);
var arr=[“0”、“2”、“8”、“8”、“8”、“8”、“8”、“2”、“9”、“9”、“9”、“9”、“2”、“10”、“10”、“10”、“10”、“0”、“3”、“11”、“11”];
var newObj={}
对于(变量i=0;i

基于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;
});

基于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;
});

我认为您试图在JS中实现的是不可能的-根据您所写的,您的输出对象将有两个值为0的键(或三个值为2的键)

可能的是分组,但不是根据您提供的输出:

let 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"];

let output = [];
for (let 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);
let input=[“0”、“2”、“8”、“8”、“8”、“8”、“2”、“9”、“9”、“9”、“9”、“2”、“10”、“10”、“10”、“10”、“0”、“3”、“11”、“11”];
让输出=[];

例如(设i=0;i我认为您试图在JS中实现的目标是不可能的-根据您编写的内容,您的输出对象将具有两个值为0的键(或三个值为2的键)

可能的是分组,但不是根据您提供的输出:

let 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"];

let output = [];
for (let 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);
let input=[“0”、“2”、“8”、“8”、“8”、“8”、“2”、“9”、“9”、“9”、“9”、“2”、“10”、“10”、“10”、“10”、“0”、“3”、“11”、“11”];
让输出=[];


例如(让我=0;我听说过hashmap?@kickbutowski你知道我们在这里处理javascript吗?没有显式的HashMaps,但对象实现类似。这意味着他已经在使用它们。那么:HashMaps如何解决问题呢?首先,我不知道为什么我的@不起作用。其次,你是对的:)你听说过hashmap吗?@KickButtowski你知道我们在这里处理javascript吗?没有显式的hashmap,但对象实现类似。这意味着他已经在使用它们。那么:HashMaps如何解决问题呢?第一,我不知道为什么我的@不起作用。第二,你是对的:)与jquery相同-只需更改
v
i
就可以了。哦……很好的一点,@eithedog。我应该提到我正在使用下划线.js进行循环。循环也可以用纯javascript完成……没有什么特别的地方。
值。forEach
是本机javascript。这里不需要下划线或jquery。@Trenthis还返回所有总值计数
{0=2,2=3,…}
,但不返回我在示例
{0=1,2=1,8=6,2=1,9=5,2=1,10=9,0=1,…}中提供的组计数
@DeividasJJ-抱歉…我误解了这个问题。我不理解你提供的输出。如果不是每个值的计数,那么组计数是多少?你能解释一下吗?让我哑口无言吗?jquery也一样-只需更改
v
I
就行了。哦…好的一点,@eithedog。我应该提到我正在使用下划线.js作为循环。循环也可以用纯javascript完成…没有什么特别的地方。
值。forEach
是本机javascript。这里不需要下划线或jQuery。@Trent这也会返回所有总值计数
{0=2,2=3,…}
,但不返回我在示例中提供的组计数
{0=1,2=1,8=6,2=1,9=5,2=1,10=9,0=1,…}
@DeividasJJ-对不起…我误解了这个问题。我不理解你提供的输出。如果不是每个值的计数,组计数是什么?你能解释一下吗?给我哑一下吗?Gagnon这个返回总值计数{0=2,2=3,…},但不是我在示例{0=1,2=1,8=6,2=1,9=5,2=1,10=9,0=1,…}@DeividasJJ中提供的组计数。好的,您不能有一个具有2倍相同键的对象…您想要的(如所述)是不可能的…Gagnon这返回总值计数{0=2,2=3,…},但不是我在示例中提供的组计数{0=1,2=1,8=6,2=1,9=5,2=1,10=9,0=1,…}@DeividasJJ好吧,你不能有一个具有2倍相同键的对象…你想要的(如所描述的)是不可能的…谢谢你,这正是我需要的谢谢你,这正是我需要的