我有一系列产品名称,例如:
我想在JavaScript中删除字符串的重复的第一部分,以产生一个像这样的数组:
产品名称可以是任何东西,例如8盎司浴缸,但开头始终具有重复项/相同的前缀
不确定从此正则表达式开始,还是不确定一个比较每个字符直到遇到不匹配的循环
答案 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)