Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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_Underscore.js - Fatal编程技术网

Javascript-按键检索值,包括嵌套对象

Javascript-按键检索值,包括嵌套对象,javascript,json,underscore.js,Javascript,Json,Underscore.js,我正在尝试编写一个函数,该函数将按键检索值,包括在嵌套对象中搜索 以下是我得到的信息: function getByKey (obj, key) { if(obj.hasOwnProperty(key)){ return obj[key]; }else{ for(var prop in obj){ if(typeof prop == "object" && prop !== null){ i

我正在尝试编写一个函数,该函数将按键检索值,包括在嵌套对象中搜索

以下是我得到的信息:

function getByKey (obj, key) {
   if(obj.hasOwnProperty(key)){
         return obj[key];
   }else{
      for(var prop in obj){
          if(typeof prop  == "object" && prop !== null){
             if(prop.hasOwnProperty(key)){
               return prop[key];
             }else{
               return iterate(prop, key);
             }
          }
     }
  }
}


如果有人有这个功能准备和工作或可以修复我的,这将是伟大的。如果有人知道下划线函数可以做到这一点,那就太好了。

问题是,您只将对键的引用传递给迭代函数,而从不引用传递给它的原始对象。您需要使用
obj[prop]
,如下所示:

function getByKey (obj, key) 
{
    if( obj.hasOwnProperty(key) )
    {
        return obj[key];
    }
    else
    {
        for(var prop in obj)
        {
            if( typeof obj[prop] == "object")
            {
                if(obj[prop].hasOwnProperty(key))
                {
                    return obj[prop][key];
                }
                else
                {
                  return getByKey(obj[prop], key);
                }
            }
        }
    }
};

问题在于,您只将对键的引用传递给迭代函数,而从不引用传递给它的原始对象。您需要使用
obj[prop]
,如下所示:

function getByKey (obj, key) 
{
    if( obj.hasOwnProperty(key) )
    {
        return obj[key];
    }
    else
    {
        for(var prop in obj)
        {
            if( typeof obj[prop] == "object")
            {
                if(obj[prop].hasOwnProperty(key))
                {
                    return obj[prop][key];
                }
                else
                {
                  return getByKey(obj[prop], key);
                }
            }
        }
    }
};

尝试以下操作:

请尝试以下操作:


对于递归,您可以尝试(JQuery几乎没有帮助)

var haystack=$.map(对象,函数(值,索引){
返回[值];
});
var值=[]//或者{}取决于你的情况
var getValues=函数(针、草堆、数组){
if(haystack[key])!==“未定义”){
array.push(haystack[key]);
}否则{
对于(var i=0;i

我希望这有助于

您可以递归地尝试(JQuery几乎没有帮助)

var haystack=$.map(对象,函数(值,索引){
返回[值];
});
var值=[]//或者{}取决于你的情况
var getValues=函数(针、草堆、数组){
if(haystack[key])!==“未定义”){
array.push(haystack[key]);
}否则{
对于(var i=0;i

我希望这有助于

您可以使用迭代和递归样式来搜索对象的属性

函数getByKey(obj,键){
功能iter(o){
如果(o!==null&&typeof o==='object'){
如果(输入o){
值=o[键];
返回true;
}
返回Object.keys(o).some(函数(k){
返回iter(o[k]);
});
}
}
var值;
iter(obj);
返回值;
}
VarO={a:1,b:{c:3,d:4,e:{f:5,g:6}}
console.log(getByKey(o,'f'));//5.
console.log(getByKey(o,'b'));//{c:…}
console.log(getByKey(o,'d'));//4.
console.log(getByKey(o,'q'));//未定义

。作为控制台包装{max height:100%!important;top:0;}
您可以使用迭代和递归样式来搜索对象的属性

函数getByKey(obj,键){
功能iter(o){
如果(o!==null&&typeof o==='object'){
如果(输入o){
值=o[键];
返回true;
}
返回Object.keys(o).some(函数(k){
返回iter(o[k]);
});
}
}
var值;
iter(obj);
返回值;
}
VarO={a:1,b:{c:3,d:4,e:{f:5,g:6}}
console.log(getByKey(o,'f'));//5.
console.log(getByKey(o,'b'));//{c:…}
console.log(getByKey(o,'d'));//4.
console.log(getByKey(o,'q'));//未定义

。作为控制台包装{max height:100%!important;top:0;}
typeof不需要括号,
null
是一个对象,
iterate
丢失。是否尝试获取具有相同键的所有值?如果是这样,则递归调用深入对象的函数。@Leolian-这就是我试图做的。嵌套对象可能为不同的值保留相同的键,因此您感兴趣的是哪一个,例如第一个、最后一个或全部?typeof不需要括号,
null
是一个对象,
iterate
丢失。是否尝试获取具有相同键的所有值?如果是这样,则递归调用深入对象的函数。@Leolian-这就是我试图做的。嵌套对象可能为不同的值保留相同的键,因此您对哪一个值感兴趣,例如第一个、最后一个或全部?尝试并发布结果。谢谢你的编辑,这是漫长的一天(:它得到了错误id你没有检查对象是否为空,或者,工作得很好,尝试并发布结果。谢谢你的编辑,这是漫长的一天(:它得到了错误id你没有检查对象是否为空,或者,工作得很好,
var haystack = $.map(obj, function(value, index) {
    return [value];
});
var values = []; //or {} depending your situation
var getValues = function( needle, haystack, array ){
    if( haystack[key]) !== 'undefined' ){
      array.push(haystack[key]);
    }else{
      for( var i = 0; i < haystack.length; i++ ){
            getValues( needle , haystack[i], array );
      }
    }
}
getValues( 'key', haystack, values );
console.log(values);  //should be an array [ value1, value2, value3, value4, ... ]
//With all values that have this same searched key