我创建了一个删除数组中“-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],temp也是[1,2,3,4]
原始和临时都被修改了!
为什么会这样?
答案 0 :(得分:2)
那是因为只有一个数组 - 简单地说,两个变量 name 相同的数组。就像一个人(带有昵称),一个对象可以有许多名称。
JavaScript中的=
(赋值)运算符不复制/克隆/复制正在分配的对象。
Array.splice
函数变异数组(其中只有一个),当使用上述内容时,解释了行为。
要创建数组的浅层克隆,arr.slice(0)
可能很有用。
答案 1 :(得分:1)
这是因为您只使用一个数组。
var temp = original;
另外要提到equal= operator不会复制对象。
您可以尝试这样的方法来实现您的目标:
var temp = original.slice(0);
答案 2 :(得分:1)
你可以像这样使用Array filter method
var res = original.filter(function(i){ return i != -1;});
答案 3 :(得分: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