在 javascript 中的两个数组中存储 '{' 和 '}' 的算法

an algorithm to store '{' and '}' in two arrays in javascript

我正在尝试做一个算法。 输入可能如下所示。

- a{1}b{1}c{1}
- a{a{1}b{1}c{1}}
- a{a{a{1}b{1}}b{b{1}c{1}}d{1}}

我有两个数组,分别命名为 "ys" 和 "ns"。 我需要将起始大括号“{”存储在数组 "ys" 中,将结束大括号“}”存储在数组 "ns" 中。但挑战在于将输入字符串中起始和结束大括号的位置存储为两个数组中相同的对应位置。 例如, 考虑第二个输入。 输出必须是这样的。

ys[0]=>1, ys[1]=>3, ys[2]=>7, ys[3]=>11.
ns[0]=>14, ns[1]=>5, ns[2]=>9, ns[3]=>13.

我的代码:

var lastPoint = line.pathPoints[line.pathPoints.length - 1].anchor; // [x, y]

var eqValues = (prompt("Enter something ", "", "")); //getting the values to write
var eqValuesCopy = eqValues;


    var nFlag=0;
    for(var i=0;i<eqValuesCopy.length;i++){
        if(eqValuesCopy[i]=="{"){
            if(i!=0){
                validBCheck=eqValuesCopy[i-1]+eqValuesCopy[i];
                if(validBCheck!="/{"){
                    ys.push(i);
                }
            }
        }
        ysLength=ys.length;
    }
    for(var i=0;i<eqValuesCopy.length;i++){
        if(eqValuesCopy[i]=="{"){
            nsLength=ns.length;
            var j=i;
            while(j<eqValuesCopy.length){
                j++;
                if(nsLength<ysLength){
                    if(eqValuesCopy[j]=="}"){
                        ns[nsLength]=j;
                        break;
                    }else if(eqValuesCopy[j]=="{"){
                         nsLength++;
                    }else{

                    }
                }
            /*else{ 
                    for(var k=0;k<=ysLength;k++){
                           // alert(ns[k]);
                        if(ns[k]==undefined){
                            ns[k]=j;
                            //alert(ns[k]);
                        }
                    }
                }*/
            }
        }
    }

我正在 javascript inside illustrator 中编写此程序。 唯一的问题是我无法为这个算法制定逻辑。

这里有一个解决方案,您可以参考一下。没有使用更多的javascript数组函数,因为如果需要转换为其他语言,逻辑将很容易理解

function parseString(s){
var ys = [];
var id = [];
var k = 0;
var ns = [];
s = s.split('');

for (var i = 0; i < s.length; i++) {
 if (s[i] == '{') {
  ys.push(i);
  id.push(ys.length - 1);
 }
 if (s[i] == '}') {
  ns[id[id.length - 1]] = i;
  id.pop();
 }
}
console.log(ys);
console.log(ns);
}

parseString('a{1}b{1}c{1}');
parseString('a{a{1}b{1}c{1}}');
parseString('a{a{a{1}b{1}}b{b{1}c{1}}d{1}}');

这可能有效

    for(var i=0;i<eqValuesCopy.length;i++){
        if(eqValuesCopy[i]=="{"){
            if(i!=0){
                validBCheck=eqValuesCopy[i-1]+eqValuesCopy[i];
                if(validBCheck!="/{"){
                    ys.push(i);
                }
            }
        }
        ysLength=ys.length;
    }
    for(var i=0;i<eqValuesCopy.length;i++){
        nsLength=ns.length;
        if(nsLength<ysLength){
            if(eqValuesCopy[i]=="{"){
                var j=i;
                while(j<eqValuesCopy.length){
                    j++;
                    if(eqValuesCopy[j]=="}"){
                        ns[nsLength]=j;
                        break; 
                    }else if(eqValuesCopy[j]=="{"){ 
                        nsLength++;
                    }else{ 

                    }
                }  
                i=j;
            }
        }
    }
    for(var k=0;k<eqValuesCopy.length;k++){
        if(eqValuesCopy[k]=="}"){
            var h=k;
            while(h<eqValuesCopy.length){
                h++;
                if(eqValuesCopy[h]=="{"){
                    break;
                }else if(eqValuesCopy[h]=="}"){ 
                    nsDummy.push(h);
                    break;
                }else{ 

                }
            }
        }
    }
nsDummy.reverse();
for(var x=0;x<nsLength;x++){
    if(ns[x]===undefined){
        ns[x]=nsDummy[x];
    }
}