如何获取创建的特定对象的连接值

时间:2015-11-19 12:27:04

标签: javascript javascript-objects

我有两个变种

var peopleTree = {
  "sandeep": "shashi",
  "nanha": "shashi",
  "harish": "nanha",
  "divya": "harish",
  "arjun": "sandeep",
  "shashi": "vinoj",
  "vishal": "divya"
}

var ages = {
  'sandeep': 23,
  'shashi': 26,
  'nanha': 22,
  'harish': 24,
  'divya': 30,
  'arjun': 25,
  'vinoj': 26,
  'vishal': 5
}

使用class person创建新对象时,必须将ancestors和age属性添加到 object(例如:创建var sandeep = new Person('sandeep', peopleTree, ages)对象时,sandeep.ancestors应该给出 ['sandeep', 'shashi', 'vinoj']sandeep.ages应该[23, 26, 26]

2 个答案:

答案 0 :(得分:1)

参见this JSFiddle。

的JavaScript

var peopleTree = {
  "sandeep": "shashi",
  "nanha": "shashi",
  "harish": "nanha",
  "divya": "harish",
  "arjun": "sandeep",
  "shashi": "vinoj",
  "vishal": "divya"
}

var ages = {
  'sandeep': 23,
  'shashi': 26,
  'nanha': 22,
  'harish': 24,
  'divya': 30,
  'arjun': 25,
  'vinoj': 26,
  'vishal': 5
}

function getAncestors(name, peopleTree, ancestors){
    if(!ancestors){
        ancestors = [];   
    }

    ancestors.push(name);

    if(peopleTree[name]){
        return getAncestors(peopleTree[name], peopleTree, ancestors);
    }

    return ancestors;
}

function getAges(ancestors, agesList){
    var ages = [];
    for(var i = 0; i < ancestors.length; i++){
        var age = agesList[ancestors[i]];
        if(age){
            ages.push(age);
        }
    }
    return ages;
}

function Person(name, peopleTree, ages){
    this.name = name;
    this.ancestors = getAncestors(name, peopleTree);
    this.ages = getAges(this.ancestors, ages);
}

var sandeep = new Person('sandeep', peopleTree, ages);

答案 1 :(得分:0)

此解决方案遍历peopleTree,然后从祖先阵列中构建数组

function Person(name, peopleTree, ages) {
    this.name = name;
    this.ancestors = [name];
    while (peopleTree[name]) {
        this.ancestors.push(peopleTree[name]);
        name = peopleTree[name];
    }
    this.ages = this.ancestors.map(function (a) { return ages[a]; });
}

var peopleTree = { "sandeep": "shashi", "nanha": "shashi", "harish": "nanha", "divya": "harish", "arjun": "sandeep", "shashi": "vinoj", "vishal": "divya" },
    ages = { 'sandeep': 23, 'shashi': 26, 'nanha': 22, 'harish': 24, 'divya': 30, 'arjun': 25, 'vinoj': 26, 'vishal': 5 },
    sandeep = new Person('sandeep', peopleTree, ages);

document.write('<pre>' + JSON.stringify(sandeep.ancestors, 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(sandeep.ages, 0, 4) + '</pre>');