【问题标题】:javascript find parent of array itemjavascript查找数组项的父项
【发布时间】:2011-03-01 11:39:42
【问题描述】:

我有一个这样的数组项:

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

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

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

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

【问题讨论】:

  • 输入了您问题的哪一部分?了解您需要输出为 NY....
  • @vishwanath 输入是数组变量

标签: javascript arrays parent


【解决方案1】:

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

为此,您必须引用“根”数组,这取决于您的数据模型。
假设 USA 是可访问的,并且只包含数组,您可以这样做:

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,因为您正在传递一个值(和数组项),并且您希望返回该数组。
如果你想知道数组的name,你应该返回member

【讨论】:

  • 如果我们有多个键值对怎么办? USA, Germany, AU, UK?我们应该在对象内部循环吗?
【解决方案2】:

这是一个通用函数,可用于查找任何类型的多维对象的父键。我习惯使用 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;
})

【讨论】:

  • 您能否提供更多关于如何使用它以及参数是什么的详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多