Javascript 避免迭代外部循环
我有一个场景,需要迭代两个列表或数组以获得所需的值。所以我在做这样的事情:Javascript 避免迭代外部循环,javascript,jquery,Javascript,Jquery,我有一个场景,需要迭代两个列表或数组以获得所需的值。所以我在做这样的事情: var html = ""; $.each(list, function (i, set1) { //set1 is a list or array $.each(set1.Tabs, function (i, set2) { //set1.Tabs is another one html += "<li><a href='#" + set
var html = "";
$.each(list, function (i, set1) { //set1 is a list or array
$.each(set1.Tabs, function (i, set2) { //set1.Tabs is another one
html += "<li><a href='#" + set2.TabName + "'>" + set2.Details + "</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>";
})
})
尽管上述方法可行,但我的预期结果如下:
输入:[1,2,3,3,4,5,6,6]输出:[1,2,3,4,5,6] N.B:我关心的是内部循环,而不是外部循环。但是为了迭代内部循环,我必须遍历外部循环。有什么方法可以让内环直接工作吗 更新1:示例代码
$(文档).ready(函数(){
var html=“”;
风险值数据=[{
“id”:“0001”,
“类型”:“甜甜圈”,
“名字”:“蛋糕”,
“ppu”:0.55,
“浇头”:
[
{“id”:“5001”,“type”:“None”},
{“id”:“5002”,“type”:“glassed”},
{“id”:“5005”,“type”:“Sugar”},
{“id”:“5007”,“类型”:“糖粉”}
]
},
{
“id”:“0002”,
“类型”:“甜甜圈”,
“名字”:“蛋糕”,
“ppu”:0.55,
“浇头”:
[
{“id”:“5001”,“type”:“None”},
{“id”:“5002”,“type”:“glassed”},
{“id”:“5005”,“type”:“Sugar”},
{“id”:“5007”,“类型”:“糖粉”}
]
}
]
$。每个(数据,函数(i,set1){//set1是一个列表或数组
$.each(set1.topping,function(i,set2){//set1.Tabs是另一个
html+=“删除选项卡” ”;
})
})
$('#add').append(html);
});代码>
您可以基于id
创建唯一的浇头,然后使用唯一浇头呈现列表。要创建独特的浇头,可以使用flatMap()
Object.values()
和array\reduce
$(文档).ready(函数(){
var html=“”;
风险值数据=[{
“id”:“0001”,
“类型”:“甜甜圈”,
“名字”:“蛋糕”,
“ppu”:0.55,
“浇头”:[{
“id”:“5001”,
“类型”:“无”
},
{
“id”:“5002”,
“类型”:“釉面”
},
{
“id”:“5005”,
“类型”:“糖”
},
{
“id”:“5007”,
“类型”:“糖粉”
}
]
},
{
“id”:“0002”,
“类型”:“甜甜圈”,
“名字”:“蛋糕”,
“ppu”:0.55,
“浇头”:[{
“id”:“5001”,
“类型”:“无”
},
{
“id”:“5002”,
“类型”:“釉面”
},
{
“id”:“5005”,
“类型”:“糖”
},
{
“id”:“5007”,
“类型”:“糖粉”
}
]
}
]
const uniqueToppings=对象值(数据
.flatMap(o=>o.topping)
.reduce((r,{id,type})=>{
r[id]=r[id]|{id,type};
返回r;
},{}));;
$。每个(唯一浇头,功能(i,套){
html+=“删除选项卡” ”;
});
$('#add').append(html);
});代码>
您有什么问题?请注意,如果您可以在问题中添加一个list
示例,这样我们就可以重新创建您的环境,关于内部循环,使用另一个变量作为索引,这可能会更加有益<代码>i
用于外部循环。。。因此,使用j
作为内部代码除此之外,您没有发布足够的代码来解决您的问题。list
是一个二维数组。您是要过滤掉重复的行,还是只是重复的单元格?如果是单个单元格,则set2
对象中是否有唯一的ID属性?过滤掉重复的行@Barmar。内部循环按预期工作,但外部循环获得意外的重复结果集。
list = list.filter((x, i, a) => a.indexOf(x) === i);