2011-03-01 34 views
1

的父母我有一个数组的项目是这样的:JavaScript的发现阵列项目

var array = USA.NY[2]; 
// gives "Albany" 

{"USA" : { 
    "NY" : ["New York City", "Long Island", "Albany"] 
}} 

我想从刚刚在数组找到状态。我该怎么做呢?谢谢。

function findParent(array) { 
    // do something 
    // return NY 
} 
+0

哪一部分你的问题是输入?理解你需要输出为NY ... – Vishwanath 2011-03-01 11:44:53

+0

@vishwanath输入是数组变量 – Mark 2011-03-01 11:59:42

回答

5

在Javascript中,数组元素没有引用包含它们的数组。

为了达到这个目的,你必须引用'root'数组,这取决于你的数据模型。
假设美国进行访问,并且只包含数组,你可以这样做:

function findParent(item) { 
    var member, i, array; 
    for (member in USA) { 
     if (USA.hasOwnProperty(member) && typeof USA[member] === 'object' && USA[member] instanceof Array) { 
      array = USA[member]; 
      for(i = 0; i < array.length; i += 1) { 
       if (array[i] === item) { 
        return array; 
       } 
      } 
     } 
    } 
} 

注意,因为你沿着值(和数组项)通过我已经改名为array参数item,和你期望数组被返回。
如果您想知道该阵列的名称,则应改为返回member

+0

非常感谢你+1 – Mark 2011-03-01 12:16:06

1

这是一个泛型函数,可用于查找任何类型的多维对象的父键。我习惯于使用underscore.js,并且为了简洁而抽象出数组和循环。

(function (root, struct) { 
var parent = null; 
var check = function (root, struct) { 
    _.each(root, function (value, key) { 
     if (value == struct) { 
      parent = key; 
     } else if (root == struct) { 
      parent = '_root'; 
     } else if (typeof value === 'object') { 
      check(value, struct); 
     } 
    }); 
} 
check(root, struct); 
return parent; 

})

+0

你能提供一些关于如何使用和参数的更多细节。 – 2013-02-06 22:46:03