Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ссылки на элементы составного объекта (https://javascript.ru/forum/misc/71023-ssylki-na-ehlementy-sostavnogo-obekta.html)

Luca 19.10.2017 19:33

Ссылки на элементы составного объекта
 
Здравствуйте.
Есть массив объектов.
Если объект внутри массива обладает нужным свойством, то его надо удалить.
Если использую delete, то работает, а если splice, то "не так" работает.
Для прохода использую
for (var i = 0; i < arr.length; i++) {
////////...........
}

но delete, как известно, "оставляет дырки"

Luca 19.10.2017 19:49

можно проще сформулировать:
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]

а как правильно удалить?

рони 20.10.2017 00:28

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

Alexandroppolus 20.10.2017 00:40

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(', '));

ruslan_mart 20.10.2017 02:35

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, время: 08:43.