我需要将两个对象分组为一个对象数组。
起始物体:
{strIngredient1: 'Light rum',
strIngredient2: 'Lime',
strIngredient3: 'Sugar',
strIngredient4: 'Mint',
strIngredient5: 'Soda water'}
{strMeasure1: '2-3 oz ',
strMeasure2: 'Juice of 1 ',
strMeasure3: '2 tsp ',
strMeasure4: '2-4 '}我希望最终的对象数组如下所示:
[
{ingredient: 'Light rum', measure: '2-3 oz'},
{ingredient: 'Lime', measure: 'Juice of 1'},
etc... (if no measure, fill with empty string)
]我尝试根据键和值将对象解析为两个数组,然后遍历两个数组并根据键中的数字输出值,但是必须有一种更有效的方法来获得所需的结果。有什么建议吗?
发布于 2022-06-24 15:44:29
您可以循环遍历create对象的键,并通过分割成分号并为该数字寻找相应的度量来创建所需的数组。
const
ingredients = { strIngredient1: "Light rum", strIngredient2: "Lime", strIngredient3: "Sugar", strIngredient4: "Mint", strIngredient5: "Soda water" },
measurements = { strMeasure1: "2-3 oz", strMeasure2: "Juice of 1", strMeasure3: "2 tsp", strMeasure4: "2-4" },
result = Object.keys(ingredients).map((k) => ({
ingredient: ingredients[k],
measure: measurements[`strMeasure${k.slice(13)}`] ?? "",
}));
console.log(result);
发布于 2022-06-24 15:57:18
您可以分离密钥并构建一个新对象。
const
data = [{ strIngredient1: 'Light rum', strIngredient2: 'Lime', strIngredient3: 'Sugar', strIngredient4: 'Mint', strIngredient5: 'Soda water' }, { strMeasure1: '2-3 oz ', strMeasure2: 'Juice of 1 ', strMeasure3: '2 tsp ', strMeasure4: '2-4 ' }],
keys = { strIngredient: 'ingredient', strMeasure: 'measure' },
result = data.reduce((r, o, i) => {
Object.entries(o).forEach(([key, value]) => {
const [, k, i] = key.match(/^(.*?)(\d+)$/);
(r[i - 1] ??= { ingredient: '', measure: '' })[keys[k]] = value;
});
return r;
}, []);
console.log(result);
https://stackoverflow.com/questions/72746398
复制相似问题