在多维度数组上使用javascript forEach和拼接

问题描述 投票:0回答:2

我正在尝试遍历看起来像这样的一些数据:

[0]['fields']['status']['name'] = 'In progress'
[1]['fields']['status']['name'] = 'In progress'
[2]['fields']['status']['name'] = 'In review'
[3]['fields']['status']['name'] = 'In progress'
[4]['fields']['status']['name'] = 'In review'

我正在使用下面的foreach循环来拼接所有无用的索引,在这种情况下都是它们。

issues.forEach(function (item, index) {
   if (issues[index]['fields']['status']['name'] !== "Done") {
       issues.splice(index, 1);
   }
});

如果稍后在数组上循环,则可以输出“正在进行中”和“正在审查中”,这很奇怪,因为应该取消设置它们。我认为这是因为我在使用数组时对其进行了操作。有人可以解释出什么问题以及如何避免此问题。

javascript arrays splice
2个回答
3
投票
仅从索引末尾循环。

这可以防止看不见的索引,并将索引保​​留在其所属的位置。

var index = issues.length; while (index--) { if (issues[index].fields.status.name !== "Done") { issues.splice(index, 1); } }


2
投票
一种可能的解决方案是用while循环替换

forEach方法,因为当您使用splice时,这将修改issues数组inplace,并且您skip一些元素。

我在以下示例中对此进行了演示。

let arr = [1,2,3,4] arr.forEach((item, index) => { arr.splice(index, 1); }); console.log(arr);
解决方案

let i = 0; while(i < issues.length){ if (issues[i]['fields']['status']['name'] !== "Done") { issues.splice(i, 1); } else i++; }

© www.soinside.com 2019 - 2024. All rights reserved.