Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不使用jQuery的情况下从json数组中删除项?_Javascript - Fatal编程技术网

Javascript 如何在不使用jQuery的情况下从json数组中删除项?

Javascript 如何在不使用jQuery的情况下从json数组中删除项?,javascript,Javascript,我有以下数组: $scope.myData = [ {id: 1, age: 50}, {id: 2, age: 43}, {id: 8, age: 27}, {id: 9, age: 29} ]; 如果给定row id值,我想做的是删除一行。我知道我可以使用以下内容: $scope.myData.splice(0,1); 但

我有以下数组:

$scope.myData = [
                 {id: 1, age: 50},
                 {id: 2, age: 43},
                 {id: 8, age: 27},
                 {id: 9, age: 29}
                ];
如果给定row 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);
            }
        });    
    };
我的版本

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

remove('id', 8, myData);

以下是一种向后循环的方法(如果目标相同的属性多次匹配):

演示:

这与
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);
        }
    }
}
演示:

当可能有多个项目匹配时,需要向后循环,因为
.splice()
将更改阵列的位置并扰乱循环


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

为什么要对数组使用
for in
循环?@AlexCheuk嗯,你不应该这样做,除非你做对了。它将在
长度
和任何其他属性上循环,包括自定义
原型
属性。@AlexCheuk:在JavaScript中有很多事情你“可以”做。并不意味着他们很好。
function remove(array, property, value) {
    var i = array.length,
        j, cur;
    while (i--) {
        cur = array[i];
        if (cur[property] === value) {
            array.splice(i, 1);
        }
    }
}