在javascript中连接数组元素序列

在javascript中连接数组元素序列,javascript,arrays,Javascript,Arrays,假设我们有一个包含“char”和“pos”属性的对象数组,类似于: [{char:a,pos:9},{char:a,pos:6}] 请注意,数组中的最后四个对象具有以下char值: 我正在寻找一种方法来遍历数组,检测是否有一个包含char值的元素运行,这些元素构成一个BR标记,并将其替换为单个元素。因此,为了帮助澄清这一点,我试图从以下几点出发: [{char:a,pos:9},{char:a,pos:6}] 致: [{char:a,pos:9},{char:,pos:3}]好的,这里有一种方法

假设我们有一个包含“char”和“pos”属性的对象数组,类似于:

[{char:a,pos:9},{char:a,pos:6}]

请注意,数组中的最后四个对象具有以下char值:<,b,r,>

我正在寻找一种方法来遍历数组,检测是否有一个包含char值的元素运行,这些元素构成一个BR标记,并将其替换为单个元素。因此,为了帮助澄清这一点,我试图从以下几点出发:

[{char:a,pos:9},{char:a,pos:6}]

致:


[{char:a,pos:9},{char:,pos:3}]

好的,这里有一种方法。没有正则表达式,我认为它过于复杂(因此我并不为此感到骄傲),但它应该适合您:

var arr = [{char: 'a', pos: 9}, {char: '<', pos: 3}, {char: 'b', pos: 4}, {char: 'r', pos: 5}, {char:'>', pos: 6}],
    filled = {
      chars: {
        '<': false,
        'b': false,
        'r': false,
        '>': false
      },
      numFilled: 0
    },
    tempResults = {
      chars: []
    },
    results = [];

for (var i = 0, l = arr.length; i < l; i++) {
  var currentChar = arr[i].char,
      inFilled = filled.chars[currentChar];

  if (inFilled === false) {
    inFilled = true;
    tempResults.firstPos = tempResults.firstPos || arr[i].pos;
    tempResults.firstPos = (arr[i].pos < tempResults.firstPos) ? arr[i].pos : tempResults.firstPos;
    tempResults.chars.push(currentChar);
    filled.numFilled++;
  } else if (inFilled !== true) {
    results.push(arr[i]);
  }
}

results.push({char: tempResults.chars, pos: tempResults.firstPos});
var arr=[{char:'a',pos:9},{char:'',pos:6}],
填充={
字符:{
'':错
},
numFilled:0
},
临时结果={
字符:[]
},
结果=[];
对于(变量i=0,l=arr.length;i
假设元素按其
pos
属性排序

function concatLineBreaks(items) {
  var tag_name = null;
  for (var i = 0, ii.length; i < ii; ++i) {
    var item = items[i];
    switch (item) {
      case '<':
        tag_name = '';
        break;
      case '>':
        if (tag_name.toLowerCase() === 'br') {
          i -= 3;
          items[i]['char'] = '<br>';
          items.splice(i + 1, 3);
          tag_name = null;
        }
        break;
      default:
        if (tag_name !== null) {
          tag_name += item['char'];
        }
    }
  }
}

var items = [ ... ];
concatLineBreaks(items);
函数concatLineBreaks(项){
var tag_name=null;
对于(变量i=0,ii.长度;i
它们是否必须根据其位置(3、4、5、6)连续?或者可能是这样?此外,您需要将对象中的值表示为字符串(用引号括起来),它们始终根据其位置连续。例如,如果有一组对象的char值分别为,则它们的位置将始终是连续的。感谢您提前提供的任何信息!您是否考虑过重组数据以便于访问?“pos”到底是什么重要吗?