如何从对象数组中将两个属性的值提取到数组中

how to extract value of two properties into an array from an array of objects

您好,我有一个包含 4 个属性的对象数组,我只需要从中提取 2 个。

对象数组示例

const arr=[
    module:{
     module1:{
       foo: 1,
       bar: 2,
       anotherfoo: 5
     }, module2:{
       foo: 3,
       bar: 4,
       anotherfoo: 8
     },module3:{
       foo: 7,
       bar: 6,
       anotherfoo: 3
     },module4:{
        submodule{
       foo: 9,
       bar: 0,
       anotherfoo: 1
       }
      }
      }];

如何使用 map 将 module1 和 module4.submodule 提取到新数组中。

destructuring an object.

时您需要提供一个特定的密钥

错误:

const { module4.submodule } = { module4: { submodule: 4 } };

好:

const { module4: { submodule } = { module4: { submodule: 4 } };

同样适用于创建对象,你不能 return { module4.submodule },但你可以 return { module4Submodule: submodule }.

以下是一些可能的解决方案:

输入:数组,输出:数组

const arr = [
  {
    module: {
      module1: {
        foo: 1,
        bar: 2,
        anotherfoo: 5
      },
      module2: {
        foo: 3,
        bar: 4,
        anotherfoo: 8
      },
      module3: {
        foo: 7,
        bar: 6,
        anotherfoo: 3
      },
      module4: {
        submodule: {
          foo: 9,
          bar: 0,
          anotherfoo: 1
        }
      }
    }
  }
];

const newArr = arr.map(({ module: { module1, module4 } }) => (
  { module1, module4Submodule: module4.submodule }
));

console.log(newArr);

输入:对象,输出:对象

const obj = {
  module: {
    module1: {
      foo: 1,
      bar: 2,
      anotherfoo: 5
    },
    module2: {
      foo: 3,
      bar: 4,
      anotherfoo: 8
    },
    module3: {
      foo: 7,
      bar: 6,
      anotherfoo: 3
    },
    module4: {
      submodule: {
        foo: 9,
        bar: 0,
        anotherfoo: 1
      }
    }
  }
};

const { module: { module1, module4: { submodule } } } = obj;
const newObj = { module1, module4Submodule: submodule };

console.log(newObj);

您可以为对象

实现一个getDotPath

const getDotPath = (dotPath, obj) => {
  try {
    return dotPath.split(".").reduce((acc, prop) => acc[prop], obj)
  } catch (err) {
    return undefined
  }
}

const arr = [
  {
    module: {
      module1: {
        foo: 1,
        bar: 2,
        anotherfoo: 5,
      },
      module2: {
        foo: 3,
        bar: 4,
        anotherfoo: 8,
      },
      module3: {
        foo: 7,
        bar: 6,
        anotherfoo: 3,
      },
      module4: {
        submodule: {
          foo: 9,
          bar: 0,
          anotherfoo: 1,
        },
      },
    },
  },
]

const dotPaths = ["module1", "module4.submodule"]
const res = arr.map((el) =>
  dotPaths.map((dotPath) => getDotPath(dotPath, el.module))
)

console.log(res)