Javascript 基于值将数组拆分为其他数组
您好,我有一组数据,如下所示(它包含列表编号和品牌名称):Javascript 基于值将数组拆分为其他数组,javascript,arrays,Javascript,Arrays,您好,我有一组数据,如下所示(它包含列表编号和品牌名称): [“1_苏菲•格雷”、“2_大西洋湾”、“2_特质”、“3_塔米”、“3_翻转”、“3_鸭子•道奇”、“3_班比尼”、“4_贝利西马”] 我需要做的是将这些分开,并为每个列表创建一个ul(1个是女装,2个是男装,3个是童装等等)。我认为最好的方法是循环遍历这个数组,并根据列表编号将这些值分成不同的数组,例如 [“1_Sophie_Gray”] [“2大西洋湾”、“2特质”] [“三个塔米”、“三个翻转”、“三个鸭子”] 我想这样做的原因
[“1_苏菲•格雷”、“2_大西洋湾”、“2_特质”、“3_塔米”、“3_翻转”、“3_鸭子•道奇”、“3_班比尼”、“4_贝利西马”]
我需要做的是将这些分开,并为每个列表创建一个ul(1个是女装,2个是男装,3个是童装等等)。我认为最好的方法是循环遍历这个数组,并根据列表编号将这些值分成不同的数组,例如
[“1_Sophie_Gray”]
[“2大西洋湾”、“2特质”]
[“三个塔米”、“三个翻转”、“三个鸭子”]
我想这样做的原因是为每个新阵列构建一个单独的图标列表。所以最终我会得出这样的结论:
<div class="store_brands">
<p id="brand_intro">
Brands and departments available in this store:
</p>
<h4>list 1</h4>
<ul>
<li>
<img src="/images/v3/brand_logos/wallis.gif" alt="list 1 brands" />
</li>
</ul>
<h4>list 2</h4>
<ul>
<li>
<img src="/images/v3/brand_logos/atlantic_bay.gif" alt="list 2 brands" />
</li>
<li>
<img src="/images/v3/brand_logos/trait.gif" alt="list 2 brands" />
</li>
</ul>
<h4>list 3</h4>
<ul>
<li>
<img src="/images/v3/brand_logos/tammy.gif" alt="list 3 brands" />
</li>
<li>
<img src="/images/v3/brand_logos/flipback.gif" alt="list 3 brands" />
</li>
<li>
<img src="/images/v3/brand_logos/duck_dodge.gif" alt="list 3 brands" />
</li>
</ul>
本店提供的品牌和部门:
清单1
-
清单2
-
-
清单3
-
-
-
这是我的密码:
function inStoreBrands (storeData) {
var brandsArr = [],
listNum,
fileName,
brandImgsPath = "/images/v3/brand_logos/",
brandList = '<div class="store_brands"><p id="brand_intro">Brands and departments available in this store:</p>',
brandResults = storeData.brands,
brands = brandResults.split(", "),
listCount = 1,
titleText = "list 1";
for (var i=0; i<brands.length; i++) {
listNum = brands[i].split(/_(.+)/)[0];
listNum = parseInt(listNum);
fileName = brands[i].split(/_(.+)/)[1];
fileName = fileName.toString().toLowerCase();
function addToArray () {
brandsArr.push(brandImgsPath + fileName + '.gif');
}
if(listNum !== listCount){
buildBrandList(brandsArr, titleText);
titleText = "list " + listNum;
addToArray();
} else {
addToArray();
}
}
function buildBrandList(brandsArr, titleText) {
brandList += '<h4>'+titleText+'</h4>';
brandList += '<ul>';
for (i=0; i < brandsArr.length; i++) {
brandList += '<li><img src="'+brandsArr[i]+'" alt="'+titleText+' brands" /></li>';
}
brandList += '</ul>';
brandsArr = [];
listCount++;
}
brandList += '</div>';
return brandList;
};
功能inStoreBrands(storeData){
var brandsArr=[],
listNum,
文件名,
BrandimgPath=“/images/v3/brand_logos/”,
brandList='本店提供的品牌和部门:
,
brandResults=storeData.brands,
brands=brandResults.split(“,”),
listCount=1,
titleText=“列表1”;
对于(var i=0;i您没有发布StureDATA的确切数据以及如何构建它),所以我做了一些假设:< P>一个简单的设计更改可能会帮助您。考虑改变您创建品牌数组的格式。例如,代替存储1O-SopieGeGy,考虑1SopieGey。
var arr1;
var arr2;
//etc
for(i=0;i<brands.length - 1; i++){ //So we've split 1_Sophie-Gray from everything else
var tmpArr = brands[i].split('_');
if(tmpArr[0] == 1){ //parse to the correct array
arr1.push("brands[i]"); //push into the appropriate array
} else if(tmpArr[0] == 2) {
arr2.push("brands[i]");
}
}
请注意,您可以完全从.vb代码中添加、删除和修改此数组。然后,一旦它到达您想要的位置,您可以将其扔到负责创建客户端javascript的代码隐藏函数中
Public Function ModifyJS(ByVal PassedArr As String) As String
Dim str As String = ""
str = "<script type='text/javascript' language='javascript'>function ClickSubmit(){var btn = '" & btnSubmit.ClientID & "'; btn = getElementSomehow(btn); btn.click()};" & _
" <all your javascript> " & _
" var JSarr = [" & PassedArr & "]; " & _
" //Im using & _ to make things more readable once the js gets created" & _
" </script>"
return str
End Function
公共函数ModifyJS(ByVal PassedArr作为字符串)作为字符串
Dim str As String=“”
str=“function ClickSubmit(){var btn='”&btnSubmit.ClientID&“;btn=getelement(btn);btn.click()};”和_
" " & _
“var JSarr=[”&PassedArr&“];”&_
“//一旦js被创建,我将使用&u使内容更具可读性”&_
" "
返回str
端函数
而且…到这里也不是一个巨大的飞跃:
Public Function ModifyJS(ByVal PassedArr As String, ByVal NoArrays As Integer) As String
Dim str As String = ""
str = "<script type='text/javascript' language='javascript'>function ClickSubmit(){var btn = '" & btnSubmit.ClientID & "'; btn = getElementSomehow(btn); btn.click()};" & _
" <all your javascript> " & _
" var JSarr = [" & PassedArr & "]; " & _
For i As Integer = 0 To NoArrays
str &= " var arr" & i & "=[];"
Next
" //Im using & _ to make things more readable once the js gets created" & _
" </script>"
return str
End Function
公共函数ModifyJS(ByVal PassedArr作为字符串,ByVal NoArrays作为整数)作为字符串
Dim str As String=“”
str=“function ClickSubmit(){var btn='”&btnSubmit.ClientID&“;btn=getelement(btn);btn.click()};”和_
" " & _
“var JSarr=[”&PassedArr&“];”&_
对于i,整数=0到无阵列
str&=“var arr”&i&“=[];”
下一个
“//一旦js被创建,我将使用&u使内容更具可读性”&_
" "
返回str
端函数
希望这对兄弟有帮助
-sf什么东西在你的代码中特别不起作用?似乎你的想法是正确的,试着准确地识别代码或逻辑中有什么东西被破坏了,并缩短你的问题,把重点放在这一点上。嗨,Maerics,我刚刚读了回来,你是对的,它可以解释得更好。我遇到的问题是用列表过滤任何东西m从brands数组中取1,并将其存储在自己的数组中,然后将其传递给buildBrandList函数并为其创建html。然后,我想将brandsArr设置为空,并对listNum为2的任何对象设置为相同的值,以此类推。嗨,Mike,你对storeData的假设是正确的。正如你所看到的,html输出没有与传入的数据不匹配。因此,列表2应该只有2项,列表3应该只有4项,而列表4甚至还没有创建。有什么想法我错在哪里吗?嗨,sacredfaith,我已经用你的建议解决了这个问题(不知道为什么js小提琴不起作用,但你得到了jist)。但是我的问题是,我希望它是动态的,因为我并不总是知道要创建5个列表。我知道这要求很多,但是有没有办法动态创建arr1、arr2变量,并在循环中为每个数组调用buildBrandList函数?谢谢
Public Function ModifyJS(ByVal PassedArr As String) As String
Dim str As String = ""
str = "<script type='text/javascript' language='javascript'>function ClickSubmit(){var btn = '" & btnSubmit.ClientID & "'; btn = getElementSomehow(btn); btn.click()};" & _
" <all your javascript> " & _
" var JSarr = [" & PassedArr & "]; " & _
" //Im using & _ to make things more readable once the js gets created" & _
" </script>"
return str
End Function
Public Function ModifyJS(ByVal PassedArr As String, ByVal NoArrays As Integer) As String
Dim str As String = ""
str = "<script type='text/javascript' language='javascript'>function ClickSubmit(){var btn = '" & btnSubmit.ClientID & "'; btn = getElementSomehow(btn); btn.click()};" & _
" <all your javascript> " & _
" var JSarr = [" & PassedArr & "]; " & _
For i As Integer = 0 To NoArrays
str &= " var arr" & i & "=[];"
Next
" //Im using & _ to make things more readable once the js gets created" & _
" </script>"
return str
End Function