javascript - 计算数组中的元素并将它们添加到对象中

标签 javascript arrays object

好吧,我研究了这个问题,但在这里找不到答案,所以希望这不是重复的。我也尽量不具体,以便自己解决这个问题。

var arr = ['cat','car','cat','dog','car','dog']

function orgNums(input) {
    var count = 0;
    var obj = {};
    for (var i = 0; i < input.length; i++) {
        if (input[i] === 'cat')
        obj['cat'] = count++;
    }
    return obj;
}

我希望它返回{cat:2}但我得到 {cat:1}

最终我希望它返回 {cat:2, car:1, dog:2, gerbil:1}

所以我尝试使用 obj[cat] = ++count我得到了我想要的答案,但是当我尝试第二个 if 语句时: if input[i] === 'dog', obj[dog] = ++count我得到{cat:2, dog:4} 。我注意到它正在采取什么 count已经是 0,然后将其移至 2 以数猫,然后将其移至 4,将狗计数为 2 并加 2。我如何防止这种情况发生,以便 count每次都从 0 重新开始?

编辑: 所以这效果很好 var arr = ['猫', '汽车', '猫', '狗', '汽车', '狗']

function orgNums(input) {
    var obj = {};

    for (var i = 0; i < input.length; i++) {
        obj[input[i]] = obj[input[i]] || 0;
        obj[input[i]]++;
    }
    return obj;
}

console.log(orgNums(arr));

但我真正想要的最终输出是:

[
{cat:1
dog:2
}
{car:2
}
]

所以我尝试加入这样的 if 语句:

if (input[i] === 'cat'||'dog')

但它仍然抛出 car进入物体。我将尝试找出数组中的多个对象。再次感谢!

最佳答案

您可以减少数组,然后边计算键的数量

var arr = ['cat', 'car', 'cat', 'dog', 'car', 'dog', 'horse'];

function orgNums(input) {
    return input.reduce((a, b) => {
      return b in a ? a[b]++ : a[b] = 1, a;
    }, {});
}

console.log(orgNums(arr));

关于javascript - 计算数组中的元素并将它们添加到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962678/

相关文章:

javascript - Node.js 通过 scp 监视传入存档的目录

java - 仅在 java 中使用数组计算 50 的阶乘

php - MySQL 根据附加参数 PDO 返回行

javascript - 如何使用多个键按对象的值对对象进行排序?

javascript - ui-select 不运行标记 mod 并且无法读取未定义的属性 'length'

javascript - 如何在 EJS 中创建和使用 onclick 函数

javascript - 在下一行(新行)中显示嵌套对象属性

python - 区分组中的对象

javascript - "JavaScript objects can be indexed by strings"是什么意思?

javascript - Crockfords 自上而下运算符优先级