如何从对象数组中将两个属性的值提取到数组中
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 提取到新数组中。
时您需要提供一个特定的密钥
错误:
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)
您好,我有一个包含 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 提取到新数组中。
错误:
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)