javascript - 在 JavaScript array 中,如何合并某些项?

  显示原文与译文双语对照的内容
77 4

假设你拥有以下数组:

const ab = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a'];

如何更改这个 array,以便所有的"b"项都被组合在一起,直到你打开另一个"a"。

因此,above array的结果如下所示:

['a', 'a', 'bbb', 'a', 'bb', 'a'];

在我试图解决与 React App 中匹配模式匹配的单词的问题时,我试图解决一个问题,但这实际上是我的问题。

我已经经在这里工作了很多年了,但是不能对我感兴趣的任何东西。

有什么想法吗?

干杯。

时间:原作者:0个回答

69 2

计数重复出现的出现,然后基于这里生成结果:

 const result = [];
 let curr = array[0], count = 1;
 for(const el of array.slice(1).concat(undefined)) {
 if(el!== curr || el!=="b") {
 result.push(curr.repeat(count));
 curr = el, count = 1;
 } else count++;
 }
原作者:
101 5

假定元素总是单个字母,则可以合并元素,然后在 b 或者 non- b s 上匹配:

ab.join('').match(/(b+|.)/g)
const ab = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a'];
let output = ab.join('').match(/(b+|.)/g);
console.log(output);
原作者:
100 4

使用 Array#reduce,你可以执行如下操作。

我猜你的解决方案中的前两个字符是。

const data = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a'];
const res = data
.reduce((a,c)=>{
 const lastIndex = a.length - 1;
 if(a[lastIndex] && a[lastIndex].includes('b') && c === 'b') a[lastIndex] += c;
 else a.push(c);
 return a;
}, []);
console.log(res);
原作者:
76 4

我不知道如何解释这个问题,但是使用减少你可以以如下所示:

const ab = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a'];
function merge(arr) {
 return arr.reduce((acc,cur, index) => {
 if(arr[index - 1] === 'b' && cur!== 'a') {
 acc[acc.length - 1] = acc[acc.length - 1] + cur;
 return acc;
 }
 acc.push(cur);
 return acc;
 },[]);
}
console.log(merge(ab))
原作者:
106 1

以下是你要执行的操作:

var ab = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a'];
var index = 0;
var groupedArray = [];
var firstOccurence = true;
var groupedString ="";
var grouping = false;
for (var a = 0; a <ab.length; a++) {
 if (ab[a] =="a") {
 if (grouping) {
 grouping = false;
 firstOccurence = true;
 groupedArray.push(groupedString);
 }
 groupedArray.push(ab[a]);
 } else {
 if (firstOccurence) {
 groupedString ="";
 firstOccurence = false;
 }
 groupedString += ab[a];
 grouping = true;
 }
}
console.log(groupedArray);
原作者:
55 0

如果你只是想合并 b,那么你可以像这样使用 reduce:

如果当前项和上一项是 b,则将它的追加到最后一个累加器项。否则,将它的推送到累加器

const ab = ['a', 'a', 'b', 'b', 'b', 'a', 'b', 'b', 'a']
const output = ab.reduce((acc, c, i, arr) => {
 arr[i-1] ==="b" && c ==="b" 
? acc[acc.length - 1] += c
 : acc.push(c)
 return acc;
},[])
console.log(output)
原作者:
...