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);
}
}
}