1

我有以下数组:

$scope.myData = [
                 {id: 1, age: 50},
                 {id: 2, age: 43},
                 {id: 8, age: 27},
                 {id: 9, age: 29}
                ];

如果给定行 id 值,我想做的是删除一行。我知道我可以使用类似的东西:

$scope.myData.splice(0,1);

但是,例如,如果给定我,我如何确定行号:

var idToRemove = 8;

这是我得到的一个使用 jQuery 的解决方案。不幸的是,我不使用 jQuery,所以我正在寻找一个 javascript 解决方案。

    function remove(array, property, value) {
        $.each(array, function(index, result) {
            if (result[property] == value) {
                array.splice(index, 1);
            }
        });    
    };
4

2 回答 2

3

这是一种可行的方法,向后循环(以防您定位的同一属性多次匹配):

function remove(array, property, value) {
    var i, j, cur;
    for (i = array.length - 1; i >= 0; i--) {
        cur = array[i];
        if (cur[property] === value) {
            array.splice(i, 1);
        }
    }
}

演示:http: //jsfiddle.net/RbfTt/2/

while循环也是一样的:

function remove(array, property, value) {
    var i = array.length,
        j, cur;
    while (i--) {
        cur = array[i];
        if (cur[property] === value) {
            array.splice(i, 1);
        }
    }
}

演示:http: //jsfiddle.net/RbfTt/3/

当可能匹配多个项目时,需要向后循环,因为.splice()会更改数组并弄乱循环。

如果多个项目不匹配,则正常的递增for循环将起作用,但您可能需要放入 abreak;以确保它不会继续循环。

于 2013-04-12T04:43:07.853 回答
0

我的版本..

function remove(property, num, arr) {
    for (var i in arr) {
        if (arr[i][property] == num)
            arr.splice(i, 1);
    }
}

用法:

remove('id', 8, myData);
于 2013-04-12T04:15:17.970 回答