假设我们有一组具有'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}]
答案 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);