Ссылки на элементы составного объекта
Здравствуйте.
Есть массив объектов. Если объект внутри массива обладает нужным свойством, то его надо удалить. Если использую 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, время: 12:17. |