如何停止循环以仅获取第一个数组的内容?
Posted
技术标签:
【中文标题】如何停止循环以仅获取第一个数组的内容?【英文标题】:How to stop looping to get only the contents of first array? 【发布时间】:2017-08-07 18:59:08 【问题描述】:这是我的代码模型。
我在这个变量中接收到一个数据:
this.data = data.details;
然后我正在过滤要删除的重复项并将其放入另一个数组中,如下所示:
let dataUnique = this.data.filter(function(el, index, self)
return index == self.indexOf(el);
dataUnique
的console.log
:
Array[14]
0: "a"
1: "b"
2: "c"
3: "d"
4: "e"
5: "g"
6: "h"
7: "i"
8: "j"
9: "k"
10: "l"
11: "m"
12: "n"
13: "o"
现在问题发生在这个 if 语句中:
if(something == true)
let uData = JSON.parse(localStorage.getItem('user'));
switch (uData.language)
case 'de':
document.querySelector('table tr').insertAdjacenthtml('afterbegin', '<td'> + dataUnique + '</td>');
break;
问题是我在switch
之前的if
语句中得到dataUnique array
字段的dataUnique array
数量等于something
的数量是true
。
所以不是得到:
<table>
<tr>
<td>a b c d e f g h i j k l m n o</td>
</td>
</table>
我收到了:
<table>
<tr>
<td>a b c d e f g h i j k l m n o</td>
<td>a b c d e f g h i j k l m n o</td>
<td>a b c d e f g h i j k l m n o</td>
<td>a b c d e f g h i j k l m n o</td>
<td>a b c d e f g h i j k l m n o</td>
</td>
</table>
<td>a b c d e f g h i j k l m n o</td>
的数量等于我的if
语句中的something == true
的数量。我知道问题是什么,但我不知道如何解决。
谢谢。
编辑:我在上面有 for in 循环,即:
for (let sth in somethingObj)
let something = somethingObj[sth];
if(something.something == true) ...
【问题讨论】:
你确定你没有一个循环,里面有你的 if 吗?请张贴minimal 代码.. 请注意,我可以用 CSS 解决它:table td:not(:first-child)display:none;,但这并不是真正的解决方案。 我上面有,等一下。 你去,编辑。 【参考方案1】:javascript 允许您命名循环(如 EMCA-262 第 12.12 节中所定义。[MDN Docs])。
这让我们可以为break
命令指定循环名称,以便 js 跳出那个循环:
loop1:
for(var i = 0; i < 10; i++)
loop2:
for(var j=0;j<10;j++)
console.log(i, j);
break loop1;
这里我们告诉 break 命令突破loop1
。结果,在console.log
中是0 0
。如果我们只是休息一下,我们最终会得到这样的结果:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
将此逻辑输入到您的代码中:
outerLoop:
for (let sth in somethingObj)
let something = somethingObj[sth];
if(something == true)
let uData = JSON.parse(localStorage.getItem('user'));
switch (uData.language)
case 'de':
document.querySelector('table tr').insertAdjacentHTML('afterbegin', '<td'> + dataUnique + '</td>');
break outerLoop;
【讨论】:
【参考方案2】:当然,将检查放入循环中会给您提供与 true
s 一样多的 td
s ,您拥有的 break
在 switch
内,因此仅对 switch
有效而不是for
循环...我会说评估something.something
并将其分配给一个变量,然后执行下一步:
var test = false;
for (let sth in somethingObj)
let something = somethingObj[sth];
if(something.something == true) test=true;break ;
if(test)//do your if business here.
let uData = JSON.parse(localStorage.getItem('user'));
switch (uData.language)
case 'de':
document.querySelector('table tr').insertAdjacentHTML('afterbegin', '<td'> + dataUnique + '</td>');
break;
另一种方式(对您的逻辑进行最少的修改):
for (let sth in somethingObj)
let something = somethingObj[sth];
if(something.something == true)
let uData = JSON.parse(localStorage.getItem('user'));
switch (uData.language)
case 'de':
document.querySelector('table tr').insertAdjacentHTML('afterbegin', '<td'> + dataUnique + '</td>');
break; // this breaks out of the switch ..
break; // this breaks out of the for loop
【讨论】:
请稍等。 你能不能把它应用到我的完整代码上,我在这里遗漏了一些东西.. 不,您的开关有中断...您需要将其从开关中取出...请检查我的编辑。 第二种方法帮助缩小到只有 5 个 tds...(我有 20 个)。我在上面还有一个 for in 循环,这可能是问题吗? @eric.dummy 是的以上是关于如何停止循环以仅获取第一个数组的内容?的主要内容,如果未能解决你的问题,请参考以下文章