19.10.2017, 19:33
|
Аспирант
|
|
Регистрация: 20.06.2017
Сообщений: 69
|
|
Ссылки на элементы составного объекта
Здравствуйте.
Есть массив объектов.
Если объект внутри массива обладает нужным свойством, то его надо удалить.
Если использую delete, то работает, а если splice, то "не так" работает.
Для прохода использую
for (var i = 0; i < arr.length; i++) {
////////...........
}
но delete, как известно, "оставляет дырки"
Последний раз редактировалось Luca, 19.10.2017 в 19:42.
|
|
19.10.2017, 19:49
|
Аспирант
|
|
Регистрация: 20.06.2017
Сообщений: 69
|
|
можно проще сформулировать:
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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
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);
|
|
20.10.2017, 00:40
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
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(', '));
Последний раз редактировалось Alexandroppolus, 20.10.2017 в 00:42.
|
|
20.10.2017, 02:35
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
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);
Последний раз редактировалось ruslan_mart, 20.10.2017 в 02:37.
|
|
|
|