检查数组中是否存在对象键

Ken*_*Men 16 javascript json object

我正在尝试从现有对象中获取一些数据并将其分组为新对象.我遇到的问题是检查对象密钥是否存在,以便我可以创建一个新的,或将数据附加到现有的.

我发现了一些类似的问题,但没有一个答案有效,所以我有点卡住了.它总是最终发现它不存在并创建重复键.

我有以下代码,xxx我需要在哪里检查密钥是否存在:

var groups = [];    

for (var i=0; i<something.length; i++) {

    var group_key = 'group_'+something[i].group_id;

    if (xxx) {

        // New group

        var group_details = {};

        group_details[group_key] = {
                group_name: something[i].group_name,
                items:  [
                    { 'name': something[i].name }
                ]
        };
        groups.push(group_details);

    } else {

        // Existing group

        groups[group_key].items.push({
            'name': something[i].name
        });

    }

}
Run Code Online (Sandbox Code Playgroud)

something我传递的,是非常简单的,基本的形式:

[
    {
        group_id: 3,
        group_name: 'Group 3',
        name: 'Cat'
    },
    {
        group_id: 3,
        group_name: 'Group 3',
        name: 'Horse'
    },
    {
        group_id: 5,
        group_name: 'Group 5',
        name: 'Orange'
    }
]
Run Code Online (Sandbox Code Playgroud)

pla*_*alx 34

实现此目的的最佳方法是依赖于in操作符返回一个布尔值的事实,该值指示键是否存在于对象中.

var o = {k: 0};

console.log('k' in o); //true
Run Code Online (Sandbox Code Playgroud)

但这不是你唯一的问题,你没有任何查询对象可以让你检查密钥是否已经存在.不使用数组,而是使用普通对象.

var groups = {};
Run Code Online (Sandbox Code Playgroud)

然后,而不是groups.push(...),做groups[group_key] = group_details;

然后,您可以通过执行来检查该组是否存在 if (group_key in groups) {}