在javascript中连接数组元素的序列

时间:2011-11-15 18:21:00

标签: javascript arrays

假设我们有一组具有'char'和'pos'attrs的对象,例如:

[{char:a,pos:9},{char:<,pos:3},{char:b,pos:4},{char:r,pos:5},{char产品:>,POS:6}]

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

我正在寻找一种方法来翻阅数组,检测我是否有一系列带有char值的元素形成一个BR标记,并用一个元素替换它。所以,为了清楚起见,我试图从:

[{CHAR:一,POS:9},{炭:其中,POS:3},{CHAR:B,POS:4},{CHAR:R,POS:5},{炭产品:> ,POS:6}]

为:

[{CHAR:一,POS:9},{炭:其中,B,R,>,POS:3}]

2 个答案:

答案 0 :(得分:0)

好的,这是一种方法。在我看来,没有正则表达式,它的方式过于复杂(所以我并不为此感到骄傲),但它应该适合你:

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});

答案 1 :(得分:0)

鉴于元素按其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);
相关问题