使用字符串获取嵌套对象,使用键字符串获取ID

时间:2016-07-18 15:17:00

标签: javascript

好的,所以我记得在某处看过这个。但是不记得在哪里。 我知道应该有一个简单的方法来做到这一点。

假设我有以下随机对象:

{
    people: [
        {
            id: 257293,
            cost: {
                amount: 7,
                currency: 'USD',
            }
        },
        {
            id: 257293,
            cost: {
                amount: 3000,
                currency: 'USD',
            }
        },
    ],
    jobs: [
        {
            name: 'Dentist',
            id: 213213,
            salary: {
                amount: 400,
                currency: 'USD',
            }
        },
        {
            name: 'Soccer player',
            id: 235325,
            salary: {
                amount: 400,
                currency: 'USD',
            }
        },
        {
            name: 'cleaner',
            id: 34734737,
            salary: {
                amount: 400,
                currency: 'USD',
            }
        },
    ],
    food: 'ketchup',
}

我需要更新字段的以下密钥:

var key = '.jobs#213213.salary.amount';
var update_value = 700;

有没有简单的方法来获取和更新我的对象?任何想法或想法?

编辑: 我的问题与this问题不同,因为我希望通过对象的id访问数组而不是数组索引('jobs#235325' 235325是内部对象的id属性。)

编辑2: 由于某种原因我的问题被标记为重复(它不重复)我提供了我在这里找到的答案。

function findById(source, id) {
    for (var i = 0; i < source.length; i++) {
        if (source[i].id === id) {
        return source[i];
        }
    }
}

Object.byString = function(o, s) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, '');


    var a = s.split('.');
    for (var i = 0, n = a.length; i < n; ++i) {
        var k = a[i];

        var g = k.split('#');
        if (g) {
            k = g[0];
        }
        if (k in o) {
            o = o[k];
            if (g[1]) {
                o = findById(o, parseInt(g[1]));
            }
        } else {
            return;
        }
    }
    return o;
}

0 个答案:

没有答案