Поддерживая свою структуру данных, вы можете сначала сгенерировать массив пар из объекта units
, где каждая пара состоит из замены и регулярного выражения, используемого для этой замены.Для генерации этого массива пар мы можем использовать Object.entries () на объекте units
в сочетании с Array.map () .Обратите внимание, что регистронезависимая функция добавлена к регулярному выражению с флагом i
.Также при создании регулярного выражения мы используем границы слов (\ b) , чтобы соответствовать целым словам, а не частям других слов (например, in
внутри minced
).Краткое изложение этого можно увидеть по следующей логике:
const replacements = Object.entries(units).map(([k, v]) =>
{
v = v.map(s => `\\b${s}\\b`).join("|");
return [k, new RegExp(v, "i")];
});
Наконец, вы можете .map()
ингредиенты , как вы уже делали, применяя соответствующие замены к каждому элементумассив.
const changedIngredients = ingredients.map(el =>
{
replacements.forEach(([unit, regexp]) => el = el.replace(regexp, unit));
return el;
});
Полный пример:
const ingredients = [
"1 fresh ham, about 18 pounds, prepared by your butcher (See Step 1)",
"7 cloves garlic, minced",
"1 tablespoon caraway seeds, crushed",
"4 teaspoons salt",
"Freshly ground pepper to taste",
"1 teaspoon olive oil",
"1 medium onion, peeled and chopped",
"3 cups sourdough rye bread, cut into 1/2-inch cubes",
"1 1/4 cups coarsely chopped pitted prunes",
"1 1/4 cups coarsely chopped dried apricots",
"1 large tart apple, peeled, cored and cut into 1/2-inch cubes",
"2 teaspoons chopped fresh rosemary",
"1 egg, lightly beaten",
"1 cup chicken broth, homemade or low-sodium canned"
];
const units = {
tbsp: ['tablespoons', 'tablespoon', 'tbsps', 'tbsp'],
tsp: ['teaspoons', 'teaspoon', 'tsps', 'tsp'],
cup: ['cups', 'cup'],
oz: ['ounces', 'ounce'],
pt: ['pints', 'pint', 'pt'],
gal: ['gallons', 'gallon', 'gals', 'gal'],
pound: ['pounds', 'pound', 'lbs', 'lb'],
qt: ['quarts', 'quart', 'qts', 'qt'],
l: ['liters', 'liter', 'l'],
ml: ['mililiters', 'mililiter', 'mls', 'ml'],
cl: ['centiliters', 'centiliter', 'cls', 'cl'],
kg: ['kilograms', 'kilogram', 'kgs', 'kg'],
g: ['grams', 'gram', 'gs', 'g'],
mg: ['miligrams', 'miligram', 'mgs', 'mg'],
inch: ['inches', 'inch', 'in']
};
const replacements = Object.entries(units).map(([k, v]) =>
{
v = v.map(s => `\\b${s}\\b`).join("|");
return [k, new RegExp(v, "i")];
});
const changedIngredients = ingredients.map(el =>
{
replacements.forEach(([unit, regexp]) => el = el.replace(regexp, unit));
return el;
});
console.log(changedIngredients);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}