Javascript 基于数组构成的对象替换句子中的单词
我从Javascript 基于数组构成的对象替换句子中的单词,javascript,arrays,object,Javascript,Arrays,Object,我从API获取了一个配料对象。我想用缩写来替换每种成分中的单位。我尝试使用名为units的对象,并使用数组中要替换的值来完成这项工作,但我甚至无法让它正常工作 我尝试过许多不同的方法,这是我最新的尝试: parseIngredient() { const ingredients = [ "1 fresh ham, about 18 pounds, prepared by your butcher (See Step 1)", "7 cloves garlic, m
API
获取了一个配料对象。我想用缩写来替换每种成分中的单位。我尝试使用名为units
的对象,并使用数组中要替换的值来完成这项工作,但我甚至无法让它正常工作
我尝试过许多不同的方法,这是我最新的尝试:
parseIngredient() {
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 changedIngredients = ingredients.map(el => {
let ing = el.toLowerCase();
const keys = Object.keys(units);
const values = Object.values(units);
values.forEach((value, i) => {
for (let j; j <= value.length; j++) {
ing = ing.replace(value[j], keys[i]);
}
});
});
}
parseComponent(){
常量成分=[
“1份新鲜火腿,约18磅,由屠夫准备(见第1步)”,
“7瓣大蒜,切碎”,
“1汤匙香菜籽,压碎”,
“4茶匙盐”,
“新鲜磨碎的胡椒粉味道”,
“1茶匙橄榄油”,
“1个中等洋葱,去皮切碎”,
“3杯黑麦面包酸面团,切成1/2英寸的方块”,
“1 1/4杯粗切碎的有核李子”,
“1 1/4杯粗切杏干”,
“1个大的酸苹果,去皮,去核,切成1/2英寸的立方体”,
“2茶匙切碎的新鲜迷迭香”,
“1个鸡蛋,轻轻搅拌”,
1杯鸡汤,自制或低钠罐装
];
常数单位={
汤匙:[“汤匙”、“汤匙”、“汤匙”、“汤匙”、“汤匙”],
茶匙:[‘茶匙’、‘茶匙’、‘茶匙’、‘茶匙’,
杯子:[“杯子”,“杯子”],
盎司:[‘盎司’,‘盎司’,
品脱:[“品脱”,“品脱”,“品脱],
加仑:[“加仑”、“加仑”、“加仑”、“加仑”、“加仑”],
磅:[“磅”、“磅”、“磅”、“磅”],
qt:['quarts','quart','qts','qt'],
l:[‘升’、‘升’、‘l’],
ml:['milills','milill','mls','ml'],
cl:['centills','centill','cls','cl'],
公斤:[‘公斤’、‘公斤’、‘公斤’、‘公斤’],
g:['grams','gram','gs','g'],
mg:['miligram','miligram','mgs','mg'],
英寸:[“英寸”、“英寸”、“英寸”]
};
常量更改成分=成分。映射(el=>{
设ing=el.toLowerCase();
常量键=对象键(单位);
常量值=对象值(单位);
值。forEach((值,i)=>{
对于(让j;j维护您的数据结构,您可以首先从单元
对象生成一个对数组,其中每对都由替换和用于该替换的正则表达式组成。要生成这个对数组,我们可以在单元
对象上与一起使用。请注意大小写插入TIVE功能被添加到带有标志i
的正则表达式中。此外,在创建正则表达式时,我们使用它来匹配整个单词,而不是其他单词的一部分(例如in
ininsideminced
)
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成分=[
“1份新鲜火腿,约18磅,由屠夫准备(见第1步)”,
“7瓣大蒜,切碎”,
“1汤匙香菜籽,压碎”,
“4茶匙盐”,
“新鲜磨碎的胡椒粉味道”,
“1茶匙橄榄油”,
“1个中等洋葱,去皮切碎”,
“3杯黑麦面包酸面团,切成1/2英寸的方块”,
“1 1/4杯粗切碎的有核李子”,
“1 1/4杯粗切杏干”,
“1个大的酸苹果,去皮,去核,切成1/2英寸的立方体”,
“2茶匙切碎的新鲜迷迭香”,
“1个鸡蛋,轻轻搅拌”,
1杯鸡汤,自制或低钠罐装
];
常数单位={
汤匙:[“汤匙”、“汤匙”、“汤匙”、“汤匙”、“汤匙”],
茶匙:[‘茶匙’、‘茶匙’、‘茶匙’、‘茶匙’,
杯子:[“杯子”,“杯子”],
盎司:[‘盎司’,‘盎司’,
品脱:[“品脱”,“品脱”,“品脱],
加仑:[“加仑”、“加仑”、“加仑”、“加仑”、“加仑”],
磅:[“磅”、“磅”、“磅”、“磅”],
qt:['quarts','quart','qts','qt'],
l:[‘升’、‘升’、‘l’],
ml:['milills','milill','mls','ml'],
cl:['centills','centill','cls','cl'],
公斤:[‘公斤’、‘公斤’、‘公斤’、‘公斤’],
g:['grams','gram','gs','g'],
mg:['miligram','miligram','mgs','mg'],
英寸:[“英寸”、“英寸”、“英寸”]
};
const replacements=Object.entries(units).map([k,v])=>
{
v=v.map(s=>`\\b${s}\\b`);
返回[k,新RegExp(v,“i”)];
});
常量更改成分=成分。映射(el=>
{
replacements.forEach(([unit,regexp])=>el=el.replace(regexp,unit));
返回el;
});
console.log(更改组件);
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}
以下是所需输出的代码
// Polyfill of Contains method On String
if(!('contains' in String.prototype)) {
String.prototype.contains = function(str, startIndex) {
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
function parseIngredient() {
const ingredients = [
"1 fresh ham, about 18 pounds, prepared by your butcher (See Step1)",
"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 changedIngredients = ingredients.map(el => {
let ing = el.toLowerCase();
let shortHandedOutput=[];
for(var prop in units){
units[prop].map(u => {
if(ing.contains(u)){ // Finds if the entry is in units
ing = ing.replace(u,prop);
}
})
}
return ing;
});
}
// Execute Function
parseIngredient();
如果映射when word=>缩写,这似乎会更容易。然后,您可以在字典中查找每个单词,如果找到,则替换它。您不会从传递给配料的函数返回任何内容。map