Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换字符串数组javascript中的数字_Javascript_Arrays - Fatal编程技术网

替换字符串数组javascript中的数字

替换字符串数组javascript中的数字,javascript,arrays,Javascript,Arrays,我有一个这样的字符串数组 var items= ['products/600/application/286/tabbed/301/text', 'products/600/application/286/tabbed/305/text', 'products/600/application/500/tabbed/200/text', 'products/600/application/500/tabbed/300/text

我有一个这样的字符串数组

var items= ['products/600/application/286/tabbed/301/text',
            'products/600/application/286/tabbed/305/text',
            'products/600/application/500/tabbed/200/text',
            'products/600/application/500/tabbed/300/text',
            'products/600/application/286/tinytext',
            'products/600/differenttext'];
我需要用连续的数字替换数字(相同的数字应该相同),输出应该如下所示:

 var items= ['products[1]/application[1]/tabbed[1]/text',
                'products[1]/application[1]/tabbed[2]/text',
                'products[1]/application[2]/tabbed[1]/text',
                'products[1]/application[2]/tabbed[2]/text',
                'products[1]/application[1]/tinytext',
                'products[1]/differenttext'];
请注意,相同的数字应该得到相同的结果,例如,所有286应该是[1],因为它是最低的,而500应该替换为[2],因为它是垂直方向上下一个较大的数字。把他们想象成孩子。例如,对于行

products/600/application/286/tabbed/301/text,
products/600/application/286/tabbed/305/text,
直到
选项卡
都是一样的,但是在那之后,有两个不同的子项,第一个的id是301,第二个是305。因此,他们应该[1]和[2]。现在看一排

products/600/application/286/tabbed/305/text,
products/600/application/500/tabbed/200/text, 
products/600/application/500/tabbed/300/text,
在本例中,应用程序有两个子项。286和500。第二个是500,它自己有两个孩子。所以500年代的孩子应该是1和2(200和300)


在我应用
temp=items[0]之后,匹配(/\d+/g)我得到结果
[600286301]
。我应该使用json对象来放置从
temp
获得的所有结果,还是使用2d数组?

您可以使用执行类似操作

var items=['products/600/application/286/tabbed/301/text',
“产品/600/application/286/tabbed/305/text”,
“产品/600/application/500/tabbed/200/text”,
“产品/600/应用/500/标签/300/text”,
“products/600/application/286/tinytext”,
'产品/600/差异文本'
];
var num={};
var res=items.map(函数(v,i){//迭代数组以生成更新的数组
返回v.replace(/\/(\d+)\/(?:(.*?)\/(\d+)/(?:(.*?)\/(\d+)/)?/,函数(m,m1,m2,m3,m4,m5){//查找要替换的数字
var str=替换(m1,‘主’,0);
若有(m3){
str+=m2+替换(m3,m1);
if(m5)
str+=m4+替换(m5,m1+'.'+m3);
}
返回str;
});
});
功能更换(垫,ind1){
如果(!num[ind1])
num[ind1]={
工业:0
};
if(num[ind1][mat])//检查已定义的索引
返回'/['+num[ind1][mat]+']/';//如果已定义,请使用上一个
num[ind1][mat]=++num[ind1].ind;//否则更新对象中的索引
返回'/['+num[ind1].ind+']/';//并返回替换字符串
}

document.write(''+JSON.stringify(res,null,3)+'')JSON在这里是不相关的-它是一种序列化格式。我不清楚问题是什么is@Ege如果您的示例输出实际上是正确的,这会有所帮助…@Alnitak实际上我的结果正是我所期望的。也许我不能清楚地表达我想要的你完全改变了问题的语义。我不知道每个数字应该如何派生。答案不错,尽管我可能会尝试使用映射来保存数字->索引表(以及表大小的单独索引),而不是一个具有摊销O(n)查找成本的数组。谢谢你,这是一个很好的答案,但是你给出了结果[“products/[1]/application/[2]/tabbed/[3]/text、products/[1]/application/[2]/tabbed/[4]/text、products/[1]/application/[5]/tabbed/[6]/text、products/[1]/application/[5]/tabbed/[7]/text、products/[1]/application/[2]/tinytext、products/[1]/differenttext]。例如,在应用程序之后得到[5],我需要[1]和[2],因为有两个不同的数字需要替换,现在它给出了“产品/[1]/application/[1]/tabbed/[1]/text”、“产品/[1]/application/[1]/tabbed/[2]/text”、“产品/[1]/application/[2]/tabbed/[3]/text”、“产品/[1]/application/[2]/tabbed/[4]/text”,“products/[1]/application/[1]/tinytext”、“products/[1]/differentintext”更接近,但仍然是3和4。感谢这是我所需要的。@Ege:很高兴帮助:)