我有以下数组:
$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);
}
});
};
答案 0 :(得分:2)
这是一种有效的方式,向后循环(如果您定位的相同属性不止一次匹配):
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);
}
}
}
DEMO: 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);
}
}
}
DEMO: http://jsfiddle.net/RbfTt/3/
当可以匹配多个项目时,需要向后循环,因为.splice()
将更改阵列并弄乱循环。
如果多个项目不匹配,那么正常的递增for
循环将起作用,但您可能需要放入break;
以确保它不会继续循环。
答案 1 :(得分:0)
我的版本..
function remove(property, num, arr) {
for (var i in arr) {
if (arr[i][property] == num)
arr.splice(i, 1);
}
}
用法:
remove('id', 8, myData);