如何从多维对象中获取键及其值

时间:2017-06-28 20:04:11

标签: javascript jquery arrays object key

我正在尝试查找密钥显示的实例数,然后我也尝试获取它们的值。

我们假设我计算了tpointpackageContents键出现的次数。然后,我尝试从每个touches获取逗号分隔的tpoint列表。像这样:

tpInstance = 2;

[tpoint = 21,tpoint = 9]

有谁知道我怎么能得到这个?

var packageContents = {
        'packages': {
            'package': {
                'price': '32',
                'name': 'Gold Bundle Package',
                'calendar': {
                    'type': '2year',
                    'color': 'Brushed Nickel',
                },
                'tpoint': {
                    'type': 'Gold',
                    'touches': '21',
                    'years': '7',
                }
            },
            'package': {
                'price': '23',
                'name': 'Bronze Bundle Package',
                'calendar': {
                    'type': '2year',
                    'color': 'Brushed Nickel',
                },
                'tpoint': {
                    'type': 'Bronze',
                    'touches': '9',
                    'years': '7',
                }
            }
        }
    };

    var tpInstance = Object.keys(package).length;
    console.log(tpInstance);

2 个答案:

答案 0 :(得分:1)

您可以将packageContents结构更改为:

var packageContents = {
    'packages': [
        {
            'price': '32',
            'name': 'Gold Bundle Package',
            'calendar': {
                'type': '2year',
                'color': 'Brushed Nickel',
            },
            'tpoint': {
                'type': 'Gold',
                'touches': '21',
                'years': '7',
            }
        },
        {
            'price': '23',
            'name': 'Bronze Bundle Package',
            'calendar': {
                'type': '2year',
                'color': 'Brushed Nickel',
            },
            'tpoint': {
                'type': 'Bronze',
                'touches': '9',
                'years': '7',
            }
        }
    ]
};

这是因为你有重复的名为package的密钥..这将使工作:

var tpInstance = 0;
var result = [];
packageContents.packages.map(function(pack) {
    if('tpoint' in pack) {
        if('touches' in pack.tpoint) {
            result.push(pack.tpoint.touches);
            tpInstance ++;
        }
    }
});

答案 1 :(得分:0)

这里有一些事情。在Javascript中,对象属性必须是唯一的。通过将items: id | item | parent_id ------------------------ 1 | banana | 0 2 | orange | 1 3 | tomato | 0 items_tags: id | item_id | tag_id --------------------- 1 | 1 | 1 2 | 1 | 2 3 | 2 | 3 4 | 3 | 4 tags: id | tag -------------- 1 | yellow 2 | fruit 3 | orange 4 | red 设置为packageContents.packages.package,然后将相同的属性设置为Gold Bundle Package,您可以有效地覆盖原始属性。就像其他答案所说,你可以这样重写你的对象:

Bronze Bundle Package

注意,键现在是 。我的做法很严重,但确实有效。我们可以使用var packageContents = { 'packages': { 'package1': { 'price': '23', 'name': 'Bronze Bundle Package', 'calendar': { 'type': '2year', 'color': 'Brushed Nickel', }, 'tpoint': { 'type': 'Bronze', 'touches': '9', 'years': '7', } }, 'package2': { 'price': '32', 'name': 'Gold Bundle Package', 'calendar': { 'type': '2year', 'color': 'Brushed Nickel', }, 'tpoint': { 'type': 'Gold', 'touches': '21', 'years': '7', } } } }; 来计算对象的结构并迭代它的值。这是我的方法:

Object.keys()

希望这些评论能够澄清任何混淆。