【问题标题】:JavaScript get first two words from string in ArrayJavaScript 从数组中的字符串中获取前两个单词
【发布时间】:2020-12-31 13:42:30
【问题描述】:

我是 JavaScript 新手,所以我什至不知道从哪里开始。请有人可以帮助我。 我有这一系列的成分:

const ingris =  [
  "1 cup heavy cream",
  "8 ounces paprika",
  "1 Chopped Tomato",
  "1/2 Cup yogurt",
  "1 packet pasta ",
  "1/2 teaspoon freshly ground black pepper, divided",
]

我正在尝试取出 1 cup1/2 teaspoon(数组的前 2 个字)并将其添加到新的对象数组中,如下所示:

const ShoppingList = [
  {
    val: "heavy cream",
    amount: "1 cup",
  },
  {
    val: "Tomato",
    amount: "1 Chopped ",
  },
  {
    val: "yogurt",
    amount: "1/2 Cup",
  },
];

【问题讨论】:

  • 把你的大问题分解成小问题。你搜索过"javascript get first 2 words" on Google吗?
  • 您可以在循环中使用 split 函数遍历所有数组元素,然后抓取溢出的数组并将前两个元素添加到对象中。
  • @blex 是的,但这是一个数组而不是单个字符串
  • @Souhailhimself 请您发布答案,因为我不知道该怎么做。我真的很感谢你能给我的所有帮助!!!!!!
  • 它不适用于辣椒...对于番茄,“1”是合适的 - 超过“1 切碎”。您需要编写一个语言解析器...拆分为数量、度量、项目,并将其余部分(如果有)打包到评论中:1/2 teaspoon freshly ground black pepper, divided => [1/2, teaspoon], black pepper, @ 987654330@... 可以,但是工作量很大。也许有一些东西可以解决这个问题 - 但我欢迎挑战自己编写代码!

标签: javascript arrays sorting object javascript-objects


【解决方案1】:

可能我会尝试使用.map() 首先遍历字符串数组并将其转换为新的对象数组。在每次迭代中,您可以通过空格.split() 字符串,并且很可能数组的前 2 个元素可以是 amount 属性,其余的是值。

参见文档:

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

split() 方法将一个 String 划分为一个有序的子字符串列表,将这些子字符串放入一个数组中,并返回该数组。划分是通过搜索模式来完成的;其中模式作为方法调用中的第一个参数提供。

尝试如下:

const ingris = [
  "1 cup heavy cream",
  "8 ounces paprika",
  "1 Chopped Tomato",
  "1/2 Cup yogurt",
  "1 packet pasta",
  "1/2 teaspoon freshly ground black pepper, divided",
];

const result = ingris.map(e => {
  const split = e.split(' ');
  const amount = `${split[0]} ${split[1]}`;
  
  return { val: e.replace(`${amount} `, ''), amount };
});

console.log(result);

一旦您有不同格式的输入字符串,您可能需要添加回退,例如检查该字符串中是否至少有 3 个单词。

【讨论】:

  • 哇@norbitrial 非常感谢你,你太棒了。我如何添加你所说的这个后备?
  • @DilhanBhagat 使用if 语句,检查split 数组中的length,如if (split.length > 2) { }
【解决方案2】:

使用Array#map 将给定数组映射到一个新数组。 Split 空格处的字符串。返回一个新对象,其中前 2 个数组元素为 val,其他为数量。要获取最后一个元素,请使用 Array#sliceArray#join 以及空格作为胶水将它们连接到字符串。

const ingris =  [
  "1 cup heavy cream",
  "8 ounces paprika",
  "1 Chopped Tomato",
  "1/2 Cup yogurt",
  "1 packet pasta ",
  "1/2 teaspoon freshly ground black pepper, divided",
];

let result = ingris.map(str => {
    let arr = str.split(' ');
    return {val: arr[0] + ' ' + arr[1], amount: arr.slice(2).join(' ')};
});

console.log(result);

【讨论】:

    【解决方案3】:

    有多种方法,但使用 Array.prototype.map 循环遍历数组,String.prototype.split 将每个字符串转换为循环内的数组,Array.prototype.slice() 从数组中获取切片将帮助您创建所需的内容。但请记住,它目前总是得到前 2 个词和之后的词。所以你的配料每次都必须是一样的

    const ingris =  [
      "1 cup heavy cream",
      "8 ounces paprika",
      "1 Chopped Tomato",
      "1/2 Cup yogurt",
      "1 packet pasta ",
      "1/2 teaspoon freshly ground black pepper, divided",
    ];
    
    const shoppingList = ingris.map(ingredient => {
      const splitIngredient = ingredient.split(' ');
      const amount = splitIngredient.slice(0, 2).join(' ');
      const val = splitIngredient.slice(2, splitIngredient.length).join(' ');
      return { val, amount };
    });
    
    console.log(shoppingList);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2022-08-02
      • 1970-01-01
      相关资源
      最近更新 更多