jQuery迭代循环删除元素
jQuery iterate through loop delete elements
我有一个对象的javascript数组:每个对象都包含键/值对。我试图遍历这个数组,并删除任何特定键(比如"Industry")的值与给定值不匹配的对象。这是我的代码,由于某种原因,它没有在整个数组中循环,我认为这与当我删除一个项目时,循环计数器不知怎么搞砸了有关:
var industry = 'testing';
var i = 0;
for (i = 0; i < assets_results.length; i++) {
var asset = assets_results[i];
var asset_industry = asset['industry'];
if (industry != asset_industry) { assets_results.splice(i,1); }
}
有什么想法吗?提前谢谢。
这是因为当拼接一个元素时,数组的大小会减少一。拼接后的所有元素都会将一个位置移动到阵列的开头,并填充拼接后的元素的空间。所以代码漏掉了一个元素。试试这个代码。
var industry = 'testing';
var i = 0;
for (i = 0; i < assets_results.length; i++) {
var asset = assets_results[i];
var asset_industry = asset['industry'];
if (industry != asset_industry) {
assets_results.splice(i,1);
i--;
}
}
当在迭代对象时修改对象时,这是一个常见的问题。避免这个问题的最佳方法是,创建一个新数组,并且只在通过测试时添加对,而不是在测试失败时从现有数组中删除对。
var industry = 'testing';
var i = 0;
var asset_results_filtered = [];
for (i = 0; i < assets_results.length; i++) {
if (industry == assets_results[i]) {
asset_results_filtered.push(assets_results[i]);
}
}
编辑:您的代码看起来有点不合逻辑——我修改了示例以使用给定的变量。
splice从数组中删除元素并调整其大小:
var arra = ['A', 'B', 'C', 'D'];
arr.splice(1,2); // -> ['A', 'D'];
这意味着在拼接时不应增加i,因为您将跳过下一个元素。拼接将使i+2元素成为i+1元素。
var industry = 'testing';
for (var i = 0, max = assets_results.length; i < max; ) { // Accessing a property is expensive.
if (industry != assets_results[i]['industry']) {
assets_results.splice(i,1);
} else {
++i;
}
}
试试这个:
var industry = 'testing';
var i = assets_results.length - 1;
for (; i > 0; i--) {
var asset = assets_results[i],
asset_industry = asset['industry'];
if (industry != asset_industry) { assets_results.splice(i,1); }
}
相关文章:
- 删除对HTML元素的拖动
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 从所有元素中删除HTML5验证
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 从组件状态的数组中删除元素
- angularjs删除动态形式元素中的特殊字符
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 删除不起作用的父元素和所有子元素
- 一些元素没有从数组中删除
- 正在尝试删除子元素的最后一个子元素
- JavaScript-如何按类查找元素并删除此类
- 正则表达式条件来删除元素
- Small Javascript从动态表单中删除多个元素的问题
- javascript:在元素删除后停止setInterval
- JQUERY:动态 AJAX 和 html 元素删除
- AngularJS ngRepeat元素删除
- AngularJS & lt; select>使用ng-model和ng-options在元素删除时被破坏
- jQuery UI datetimepicker绑定到错误的输入后DOM元素删除
- 防止 jQuery 在元素删除时取消绑定事件