Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查对象中是否存在对象键_Javascript_Json_Object - Fatal编程技术网

Javascript 检查对象中是否存在对象键

Javascript 检查对象中是否存在对象键,javascript,json,object,Javascript,Json,Object,我试图从现有对象中获取一些数据,并将其分组到新对象中。我遇到的问题是检查对象键是否存在,以便我可以创建一个新的对象键,或者将数据附加到现有的对象键 我发现了一些类似的问题,但没有一个答案有效,所以我有点卡住了。它总是发现它不存在并创建重复的键 我有以下代码,其中xxx是我需要检查密钥是否存在的地方: var groups = []; for (var i=0; i<something.length; i++) { var group_key = 'group_'+som

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

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

我有以下代码,其中
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
        });

    }

}

我经常遇到这种模式,最后我做的是:

if (object[key]) {
    //exists
} else {
    // Does not exist
}
因此,我认为你的情况是:

if (groups[group_key]) {
    // Exists
} else {
    // Does not exist 
}

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

var o = {k: 0};

console.log('k' in o); //true
但这不是您的唯一问题,您没有任何允许您检查密钥是否已存在的查找对象。不要使用数组,而是使用普通对象

var groups = {};
然后,不要使用
组。按(…)
,而是执行
组[group\u key]=group\u详细信息

然后,您可以通过执行
if(group_key in groups){}

检查组是否存在。您可以使用hasOwnProperty()函数

var groups = [];    

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

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

    if (!groups.hasOwnProperty(group_key)) {

        // New group

        var group_details = {};

        group_details[group_key] = {//maybe change to group_details =
                group_name: something[i].group_name,
                items:  [
                    { 'name': something[i].name }
                ]
        };

        //groups.push(group_details);
        //change it to
        groups[group_key] = group_details;

    } else {

        // Existing group

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

    }

}
var组=[];

对于(var i=0;i,您可以从对象中检索键并遍历列表,查看键是否存在:

var keys=Object.keys(object)
for(var i=0;i<keys.length;i++){
     if(keys[i]=="your key"){//check your key here}
}
var keys=Object.keys(对象)
对于(var i=0;iExampleArray

[0] => siteoverlay
[1] => overlaycenter
[2] => someelementid
解决方案A 如果需要,可以扩展原型(这里的函数使用while循环,它比in快得多):

然后您可以使用:

alert(exampleArray.getKey("overlaycenter"));  
回报:1

解决方案B 还包括原型扩展:

if(!('array_flip' in Array.prototype)){
      Array.prototype.array_flip=function(array) {
        tmp_ar={}; var i = this.length;
        while(i--)
        {   if ( this.hasOwnProperty( i ) )
               { tmp_ar[this[i]]=i; }
        } return tmp_ar;    
      };
  }
然后您可以使用:

alert(exampleArray.array_flip(exampleArray['someelementid']);
    function array_flip( array )
    {  tmp_ar={};  var i = array.length;
        while(i--)
        {  if ( array.hasOwnProperty( i ) )
              { tmp_ar[array[i]]=i; }
        } return tmp_ar;    
    }
收益:2

溶液C 发现没有原型添加它也是功能性的

最终,对于兼容脚本来说更好,因为每个人都说不要扩展原型…因此,…是的,如果您想将其与easy 1 liner一起使用,那么您可以使用:

alert(exampleArray.array_flip(exampleArray['someelementid']);
    function array_flip( array )
    {  tmp_ar={};  var i = array.length;
        while(i--)
        {  if ( array.hasOwnProperty( i ) )
              { tmp_ar[array[i]]=i; }
        } return tmp_ar;    
    }

返回0
let data={key:'John'};

console.log(data.hasOwnProperty('key'));
您应该使用
中的
操作符

key in object     //true
!(key in object)  //false
无法使用未定义的

obj["key"] !== undefined //false, but the key in the object

有关更多信息,请查看

您需要显示阵列/object@KenTenMen,请查看我的更新答案,它解决了其他问题。警告可能重复,只有在
对象[key]
不能包含虚假值(如
0
虚假
时,此确切实现才有效。”
。您可以比较
对象[key]!==未定义的
,即使存在错误的值,它也会起作用。@jfriend00非常正确。事实上,我甚至会说,正是出于这个原因,@jfriend00关于
({k:void(0)})呢).k!==undefined;//false
,最可靠的方法是使用
中的
.Perfick。我甚至不记得当初为什么要把它做成一个数组,但这是漫长的一天,这已经解决了它!虽然这个代码片段可以解决这个问题,但确实有助于提高您的帖子质量。请记住,您是在为r回答这个问题这些人可能不知道您的代码建议的原因。
obj["key"] !== undefined //false, but the key in the object