javascript '=' работает как связанный объект?
Я сделал код, который удаляет -1 в массиве, но я не хочу изменять исходный.
следующее это.
var original = [ 1, 2, 3, 4, -1, -1 ];
var temp = original;
for ( var i = ( temp.length - 1 ); i >= 0; i-- ) {
if ( temp[j] == -1 ) {
temp.splice( i, 1 );
}
после выполнения сценария. оригинал - [ 1, 2, 3, 4 ], а темп - [ 1, 2, 3, 4 ]
и оригинал, и темп модифицированы!
почему это?
4 ответа
Это потому, что существует только один массив - просто, обе переменные называют один и тот же массив. Точно так же как человек (с никами), у единственного объекта может быть много имен.
=
Оператор (присваивания) в JavaScript не копирует / не клонирует / не дублирует назначаемый объект.
Array.splice
Функция мутирует массив (из которого есть только один), который, когда он взят с вышеупомянутым, объясняет поведение.
Чтобы создать неглубокий клон массива, arr.slice(0)
может быть полезным
Вы можете использовать метод фильтра массива, как это
var res = original.filter(function(i){ return i != -1;});
Это потому, что вы используете только один массив.
var temp = original;
Также стоит упомянуть, что оператор равенства = не копирует объект.
Вы можете попробовать что-то вроде этого, чтобы достичь того, что вы хотите:
var temp = original.slice(0);
var original = [ 1, 2, 3, 4, -1, -1 ];
var tem = original.filter(function (d) {
return d !== -1;
});
console.log(original); // [1, 2, 3, 4, -1, -1]
console.log(tem); // [1, 2, 3, 4]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter