JavaScript查找数组项的父级

3

我有一个像这样的数组项:

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

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

今日免费次数已满, 请开通会员/明日再来
function findParent(array) {
  // do something
  // return NY
}

你的问题中哪一部分是输入?我理解你需要输出为纽约。 - Vishwanath
@vishwanath 输入是数组变量 - Mark
2个回答

5

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
如果您要知道数组的名称,则应返回member

如果我们有多个键值对,例如 USA, Germany, AU, UK,我们应该在对象内部循环吗? - iamsujit

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;
})

1
你能提供一些更详细的信息,说明它将如何使用以及参数是什么吗? - Flak DiNenno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接