列出嵌套Javascript对象

时间:2016-03-23 18:57:09

标签: javascript object

我想在嵌套对象中找到所有重复的值。 例如,我想要以下宠物对象:

var pets = {
  owner1: 'Frank',
  owner2: 'Curly',
  owner3: 'Maurice',
  dogs: {
    terriers: {
      name1: 'Fido',
      name2: 'Woofy',
      name3: {
        goodDog: 'Frank',
        badDog: 'Judas',
      }
    },
    poodles: {
      name1: 'Curly',
      name2: 'Fido',
    },
  },
};

返回一个数组:

['Frank', 'Curly', 'Fido']

没有特别的顺序。感谢。

2 个答案:

答案 0 :(得分:2)

您必须迭代并存储密钥,然后检查重复项

var pets = {
  owner1: 'Frank',
  owner2: 'Curly',
  owner3: 'Maurice',
  dogs: {
    terriers: {
      name1: 'Fido',
      name2: 'Woofy',
      name3: {
        goodDog: 'Frank',
        badDog: 'Judas',
      }
    },
    poodles: {
      name1: 'Curly',
      name2: 'Fido',
    },
  },
};

var temp  = [];
var dupes = [];

(function iterate(o) {
    for (var key in o) {
    	if (typeof o[key] === "object") iterate(o[key]);
        temp.indexOf(o[key]) === -1 ? 
        	temp.push(o[key]) : 
        	dupes.indexOf(o[key]) === -1 && typeof o[key] === "string" ? 
        	dupes.push(o[key]) : o;
    }
})(pets);

document.body.innerHTML = '<pre>' + JSON.stringify(dupes) + '</pre>';

答案 1 :(得分:0)

此提案适用于两个以上相同的值。

var pets = { owner1: 'Frank', owner2: 'Curly', owner3: 'Maurice', dogs: { terriers: { name1: 'Fido', name2: 'Woofy', name3: { goodDog: 'Frank', badDog: 'Judas', } }, poodles: { name1: 'Curly', name2: 'Fido', name3: 'Fido', }, }, },
    temp = {},
    dupes = [];

(function iterate(o) {
    Object.keys(o).forEach(function (key) {
        if (typeof o[key] === "object") {
            return iterate(o[key]);
        }
        temp[o[key]] = (temp[o[key]] || 0) + 1;
        temp[o[key]] === 2 && dupes.push(o[key]);

    });
})(pets);

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