如何从javascript数组中匹配和删除对象?

时间:2014-11-22 12:55:40

标签: javascript angularjs

我正在尝试删除基于对象属性的字符串匹配的元素,但是当我在javascript数组上执行切片时,数组大小减小并且索引更改。请帮助解决方案。这是一个jsfiddle link

代码

var selection = JSON.parse('[{"Connectors":"c1"},{"Connectors":"c2"},{"Schedules":"s1"},{"Schedules":"s2"},{"Gauges":"g1"},{"Gauges":"g2"},{"Gauges":"g3"}]');

removeitem("Gauges");

function removeitem(item) {
    for (var i = 0; i < selection.length; i++) {
        if (selection[i].hasOwnProperty(item)) {
            selection.splice(i, 1);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

添加i--;

function removeitem(item) {
    for (var i = 0; i < selection.length; i++) {
        if (selection[i].hasOwnProperty(item)) {
            selection.splice(i, 1);
            i--;
        }
    }
}

jsfiddle example

答案 1 :(得分:0)

假设您在使用undefined作为新值时遇到问题,那么您可以拨打delete[i];而不是selection.splice(i, 1);,在这种情况下,长度不会改变,指数也不会。

答案 2 :(得分:0)

Abhi1964Loolooii解决方案似乎都能正常工作并解决问题,但我个人会将过滤后的结果保存在单独的数组中,而不是在同一个数组中操作索引/删除值,原因是,单独的数组会使代码看起来更容易阅读和理解。审阅者无需了解索引操作或跟踪undefined

var selection = JSON.parse('[{"Connectors":"c1"},{"Connectors":"c2"},{"Schedules":"s1"},{"Schedules":"s2"},{"Gauges":"g1"},{"Gauges":"g2"},{"Gauges":"g3"}]');

removeitem("Gauges");
var filteredResult = [];
function removeitem(item) {
    for (var i = 0; i < selection.length; i++) {
        if (selection[i].hasOwnProperty(item)) {

        }else{
           filteredResult.push(item);
        }
    }
}   

//use filtered result as per your need.

注意: 我没有运行此代码,如果出现一些错误,请随时编辑。