【问题标题】:How to get all the keys of objects in an array in JavaScript如何在 JavaScript 中获取数组中对象的所有键
【发布时间】:2019-11-28 09:03:09
【问题描述】:

我想知道将数组中对象的所有键和值提取为单独数组的更好方法是什么。我的方法要求我在提取对象的键和值后通过映射到数组来展平数组。

输入

const input = [{"a": 1, "b": 2}, {"c": 3}, {"d": 4}, {}, {"e": null, "f" : 6, "g": 7}];

输出

常量键 = [“a”, “b”, “c”, “d”, “e”, “f”, “g”];

常量值 = [1, 2, 3, 4, null, 6, 7];

我的解决方案

const input = [{
  "a": 1,
  "b": 2
}, {
  "c": 3
}, {
  "d": 4
}, {}, {
  "e": null,
  "f": 6,
  "g": 7
}];
const keys = input.map(obj => [].concat(Object.keys(obj))).flat();
console.log(keys);
const values = input.map(obj => [].concat(Object.values(obj))).flat();
console.log(values);

【问题讨论】:

  • 这是CodeReview的问题
  • 啊,感谢您向我介绍这个美妙的平台。

标签: javascript arrays object ecmascript-6


【解决方案1】:

您可以使用您已实现的flatMap

flatMap() 方法首先使用映射函数映射每个元素,然后将结果展平为一个新数组。它与 map() 后跟一个深度为 1 的 flat() 相同,但 flatMap() 通常非常有用,因为将两者合并到一个方法中效率更高。

const input = [{
  "a": 1,
  "b": 2
}, {
  "c": 3
}, {
  "d": 4
}, {}, {
  "e": null,
  "f": 6,
  "g": 7
}];

const keys = input.flatMap(Object.keys);
const values = input.flatMap(Object.values);

console.log(keys,values)

【讨论】:

  • 无需新建回调函数。你可以做flatMap(Object.keys)...等等。
【解决方案2】:

尝试一个reduce 函数,这样您就不会执行两个循环,而是在一个循环中完成所有操作?

const input = [{
  "a": 1,
  "b": 2
}, {
  "c": 3
}, {
  "d": 4
}, {}, {
  "e": null,
  "f": 6,
  "g": 7
}];

const { keys, values } = input.reduce((accum, obj) => ({
  keys: [...accum.keys, ...Object.keys(obj)],
  values: [...accum.values, ...Object.values(obj)],
}), { keys: [], values: [] });

console.log(keys, values)

【讨论】:

    【解决方案3】:

    你可以得到key然后扁平化一个数组:

    const input = [
      { "a": 1, "b": 2 },
      { "c": 3 }, { "d": 4 },
      {},
      { "e": null, "f": 6, "g": 7 }
    ];
    
    const keys = input.map(a=> Object.keys(a)).flat();
    const values = input.map(a=> Object.values(a)).flat();
    
    console.log(keys)
    console.log(values)

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2022-08-03
      • 1970-01-01
      • 2021-06-30
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多