循环中的JavaScript部分匹配对象属性



如何转换对象的数组

const arr = [{
my_first_name_1: {
value: 'jane'
},
my_last_name_1: {
value: 'anderson'
}
}, {
my_first_name_2: {
value: 'alex'
},
my_last_name_2: {
value: 'johnson'
}
}]

进入这个?

[{
"first_name": "jane",
"last_name": "anderson",
}, {
"first_name": "alex",
"last_name": "johnson",
}]

我一直在用部分字符串匹配属性

const result = arr.reduce((accum, obj) => {
obj.match(first_name)  //how to do partial matching? Tried .includes but it doesn't work
}, [])

您可以使用带有模板文字的.map(),从文档中读取:

map()方法创建一个新数组,该数组填充了对调用数组中的每个元素调用所提供函数的结果。

模板文字是允许嵌入表达式的字符串文字。可以使用多线字符串和字符串插值功能。

尝试如下:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson'} }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];

const result = arr.map((e, i) => ({
first_name: e[`my_first_name_${i + 1}`].value,
last_name: e[`my_last_name_${i + 1}`].value
}))
console.log(result);

我希望这能有所帮助!

如果键不是按顺序排列的,则可以将.map()Object.values()一起使用。.map()方法将迭代数组中的每个对象,然后您可以使用Object.values()获得这些对象的值。从值数组(即对象(中,可以析取对象value属性,并将其别名为first_namelast_name。然后,您可以将这两个析构函数值作为对象返回:

const arr = [{ my_first_name_1: { value: 'jane' }, my_last_name_1: { value: 'anderson' } }, { my_first_name_2: { value: 'alex' }, my_last_name_2: { value: 'johnson' } }];
const res = arr.map(obj => {
const [{value: first_name}, {value: last_name}] = Object.values(obj); 
return {first_name, last_name};
});
console.log(res);

您还可以获取每个对象的键,然后使用reduce()获取它们的值

const arr = [{
my_first_name_1: {
value: "jane",
},
my_last_name_1: {
value: "anderson",
},
},
{
my_first_name_2: {
value: "alex",
},
my_last_name_2: {
value: "johnson",
},
},
];
let result = arr.reduce((p, c) => {
let [first, last] = Object.keys(c);
return [...p, {
first_name: c[first].value,
last_name: c[last].value,
}];
}, []);
console.log(result);

最新更新