【问题标题】:Get all possible object keys from a list of objects Javascript/TypeScript [duplicate]从对象列表中获取所有可能的对象键 Javascript/TypeScript [重复]
【发布时间】:2017-05-08 08:27:56
【问题描述】:

我有一个这样的对象列表:

[ 
  { item1: "1", item2: "2" },
  { item1: "3", item2: "4", item3: "5" },
  { item1: "6" },
  { item1: "7", item2: "8", item3: "9", item4: "10" },
]

我需要能够获得所有可能键的列表:

["item1", "item2", "item3", "item4" ]

我尝试使用Object.Keys,但这需要我指定一个特定的对象,问题是,列表是动态生成的,所以我不知道键和值。

【问题讨论】:

  • 首先用所有键填充数组。其次,您过滤键以保留唯一键

标签: javascript arrays list object typescript


【解决方案1】:

您可以将Array#reduce 方法与Object.keys 方法一起使用。

var data = [{
  item1: "1",
  item2: "2"
}, {
  item1: "3",
  item2: "4",
  item3: "5"
}, {
  item1: "6"
}, {
  item1: "7",
  item2: "8",
  item3: "9",
  item4: "10"
}, ];

var res = data.reduce(function(arr, o) {
  return Object.keys(o).reduce(function(a, k) {
    if (a.indexOf(k) == -1) a.push(k);
    return a;
  }, arr)
}, []);

console.log(res);

【讨论】:

    【解决方案2】:

    var obj=[ 
      { item1: "1", item2: "2" },
      { item1: "3", item2: "4", item3: "5" },
      { item1: "6" },
      { item1: "7", item2: "8", item3: "9", item4: "10" },
    ],
      keys=[];
      obj.forEach(function(element){
        for (var key in element) {
            if(keys.indexOf(key)===-1){
              keys.push(key);
             }
        }
      });
      console.log(keys);

    【讨论】:

      【解决方案3】:

      如果发现比当前元素更长的元素,则应该遍历列表并获取键数组

      var obj=[ 
        { item1: "1", item2: "2" },
        { item1: "3", item2: "4", item3: "5" },
        { item1: "6" },
        { item1: "7", item2: "8", item3: "9", item4: "10" },
      ]
      var maxLength = 0;
      var keys = [];
      for (var i = yourArray.length - 1; i >= 0; i--) {
          if(Object.keys(obj[i]).length > maxLength){
              maxLength = Object.keys(obj[i]).length;
              keys = Object.keys(obj[i])
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用Set 来收集密钥。

        var obj = [{ item1: "1", item2: "2" }, { item1: "3", item2: "4", item3: "5" }, { item1: "6" }, { item1: "7", item2: "8", item3: "9", item4: "10" }],
            items = obj.reduce((s, o) => [...new Set([...s, ...Object.keys(o)])], []);
        
        console.log(items);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-22
          • 2011-03-05
          • 2015-09-16
          • 2017-10-13
          • 1970-01-01
          • 2012-11-11
          相关资源
          最近更新 更多