Ссылки на элементы составного объекта
Здравствуйте.
Есть массив объектов. Если объект внутри массива обладает нужным свойством, то его надо удалить. Если использую delete, то работает, а если splice, то "не так" работает. Для прохода использую
for (var i = 0; i < arr.length; i++) {
////////...........
}
но delete, как известно, "оставляет дырки" |
можно проще сформулировать:
console.clear();
var arr = [1,2,3,4,5,6,7];
for(var i = 0; i < arr.length; i++){
if ( arr[i] > 4) arr.splice(i, 1);
}
console.log(arr);
результат: [1,2,3,4,6] а как правильно удалить? |
Luca,
for при удалении делают с конца массива, так проще или так
console.clear();
var arr = [1,2,3,4,5,6,7];
for(var i = 0; i < arr.length; ){
if ( arr[i] > 4) arr.splice(i, 1);
else i++
}
console.log(arr);
|
delete использовать неправильно, он просто затирает пунктик.
splice сдвигает хвост массива, и если понадобится удалить много элементов, сложность будет O(N^2) для линейной сложности такой вариант:
var arr = [1,2,3,4,5,6,7];
for (var p = 0, i = 0, le = arr.length; i < le; ++i) {
if (!(arr[i] > 4)) {
arr[p++] = arr[i];
}
}
arr.length = p;
alert(arr.join(', '));
|
var arr = [1,2,3,4,5,6,7];
for(var i = 0; i < arr.length; i++){
if ( arr[i] > 4) {
arr.splice(i, 1);
i--;
}
}
console.log(arr);
var arr = [1,2,3,4,5,6,7];
arr = arr.filter(function(item) {
return !(item > 4); //item <= 4
});
console.log(arr);
|
| Часовой пояс GMT +3, время: 11:17. |