比较并删除字符串的重复部分

时间:2018-11-22 05:13:12

标签: javascript arrays

我有一系列产品名称,例如:

  • 大瓶500ml
  • 大瓶1升
  • 大瓶2l

我想在JavaScript中删除字符串的重复的第一部分,以产生一个像这样的数组:

  • 500毫升
  • 1l
  • 2l

产品名称可以是任何东西,例如8盎司浴缸,但开头始终具有重复项/相同的前缀

不确定从此正则表达式开始,还是不确定一个比较每个字符直到遇到不匹配的循环

3 个答案:

答案 0 :(得分:1)

如果您的格式始终为Name Name Name ... XXXunit。您可以使用空格分隔符轻松拆分字符串。它实际上并没有检测到任何重复项,但是根据您的帖子,听起来您只是尝试获取值和单位

const data = ['Tub 500ml', 'Tub 450ml', 'Small Can 200ml', 'Big Ass Bottle 999ml', 'Artificial Rain Tank V99.55 5500.50L'];
const result = [];

data.forEach(function(item){
  const splitted = item.split(" ");
  result.push(splitted[splitted.length - 1]);
})

console.log(result)

答案 1 :(得分:1)

由于您说了but will always have duplication at the start,所以您可以尝试关注

获取要从第一个元素中删除的字符串,然后遍历所有元素以删除该字符串

let arr1 = ['Big Bottle 500ml', 'Big Bottle 1l', 'Big Bottle 2l']

let arr2 = ['Bottle 500ml', 'Bottle 1l', 'Bottle 2l']

function getData(arr) {
  let strToRemove = arr[0].match(/\D+/)[0]

  return arr.map(d => d.replace(strToRemove, '').trim())
}

console.log(getData(arr1))

console.log(getData(arr2))

答案 2 :(得分:1)

使用Array#reduce()浏览所有字符以找到共同的起始字符串,然后使用map()删除它

const prods = ['Big Bottle 500ml','Big Bottle 1l','Big Bottle 2l'];

const dupStr = [...prods[0]].reduce((a, c) => {
  return prods.every(s => s.startsWith(a + c)) ? a + c : a;
}, '')

const res = prods.map(s => s.replace(dupStr, '').trim())

console.log(`common string :: "${dupStr}"`)
console.log('results ::\n',res)