相关疑难解决方法(0)

javascript中的递归原型继承?

Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
};
Run Code Online (Sandbox Code Playgroud)

来自JavaScript中的Prototypal继承

我一直在使用这段代码来创建从以前的代码继承的新对象.但是我遇到了一点意外.

a = {
    foo: [1,2,3]
}

b = Object.create(a);
// b.foo -> [1,2,3]
b.foo = "test";
// b.foo -> "test"
// a.foo -> [1,2,3]

c = Object.create(a);
// c.foo -> [1,2,3]
c.foo[0] = 'test';
// c.foo -> ["test",2,3]
// a.foo -> ["test",2,3]
Run Code Online (Sandbox Code Playgroud)

在尝试改变时,c.foo我改变了a.foo,c.foo显示了改变,因为它继承了a.我现在看到的唯一解决方案是仅修改以下的直接属性b:

d = Object.create(a);
d.foo = Object.create(a.foo);
d.foo[0] = 'text'; …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance prototypal-inheritance

9
推荐指数
1
解决办法
1184
查看次数

如何将匹配属性从一个对象复制到另一个对象

我有这两个对象:

obj1 = {a: '', b: ''}
obj2 = {a: '1', b: '2', c: '3'}
Run Code Online (Sandbox Code Playgroud)

我想所有匹配的特性,从复制obj2obj1.在Typescript中这样做的最佳方式是什么?

typescript

9
推荐指数
2
解决办法
5942
查看次数

Array.filter 是否对数组进行克隆(副本)?

我的理解是Array.filter创建了对象的克隆,但在下面的示例中,type1 和 type1a 显然共享一些数据。

let initial = [
   {id: 1, type: 1, name: "first", count:0},
   {id: 2, type: 2, name: "second", count:0},
   {id: 3, type: 1, name: "third", count:0},
   {id: 4, type: 2, name: "fourth", count:0},
];

let type1 = initial.filter((item)=>item.type===1);
let type1a = initial.filter((item)=>item.type===1);

type1[0].count = 2;

console.log(type1a[0].count);
Run Code Online (Sandbox Code Playgroud)

结果:

Expected result: 0
Got: 2
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

我尝试在两个 allocateemnet 中添加扩展运算符,但结果是相同的:(


感谢@Thomas 的回答。

供您参考,正确的代码是:

let initial = [
  { id: 1, type: 1, name: "first", count: 0 },
  { id: …
Run Code Online (Sandbox Code Playgroud)

javascript

9
推荐指数
1
解决办法
1万
查看次数

创建新数组而不影响旧数组的值

我正在尝试创建现有数组的副本,并从数组副本中删除一些项目而不影响原始数据.我试过这个:

var new_arr = old_arr; //when I remove from new array the items from old array are also removed
Run Code Online (Sandbox Code Playgroud)

如何创建现有阵列的全新副本?

更新:

当我这样做:

var new_arr = old_arr.slice();
Run Code Online (Sandbox Code Playgroud)

然后:

new_arr[0].shift();
new_arr[1].shift();
Run Code Online (Sandbox Code Playgroud)

来自old_array的项目将被删除.这是一个二维数组.

javascript

8
推荐指数
2
解决办法
1万
查看次数

将JSON数据存储在浏览器内存中

我想在浏览器中保留一些JSON信息.根据用户与应用程序的交互,我想将5-6个不同的JSON对象存储到内存中.我有什么选择来实现这个目标?请建议任何我可以在浏览器中保留信息的库或插件.

谢谢

javascript jquery extjs javascript-framework

8
推荐指数
2
解决办法
1万
查看次数

JS对象按值复制与按引用复制

我正在玩Chrome控制台并注意到一些我无法理解的东西.我知道JS变量是按值复制的,对象是通过引用复制的.下面的代码工作正常,输出2并证明JS对象作为参考:

var objA = {a: 1};
var objB = objA;
objA.a = 2; 
objB.a; // 2
Run Code Online (Sandbox Code Playgroud)

但是,此代码无法正常工作.我期望objB.a输出,2但它给出了1.为什么?

var objA = {a: 1};
var objB = objA;
objA = {a: 2};  //Assigned whole object here instead property.
objB.a; //1 - Shouldn't this be 2 ??
Run Code Online (Sandbox Code Playgroud)

javascript

8
推荐指数
2
解决办法
9610
查看次数

理解数组时我错过了什么?

将数组分配给另一个变量时,将传递引用而不是值.当您使用==运算符比较两个数组并且它返回时,会确认这一点true

var a = [[1,2],[3,4],[5,6]];
var b = a; // b = [[1,2],[3,4],[5,6]]
var c = [].concat(a); // c = [[1,2],[3,4],[5,6]]

a == b; //true
a == c; //false
Run Code Online (Sandbox Code Playgroud)

通过上面的输入,当我修改数组时b,它会改变数组a,但不是c.

b.push([7,8]); // b = [[1,2],[3,4],[5,6], [7,8]]
a; //a = [[1,2],[3,4],[5,6], [7,8]]
c; //c = [[1,2],[3,4],[5,6]]
Run Code Online (Sandbox Code Playgroud)

但是当我在下面做的时候,它会发生变异c.

b[0].push(5); // b = [[1,2,5],[3,4],[5,6], [7,8]]
a; //a = [[1,2,5],[3,4],[5,6], [7,8]]
c; //c = [[1,2,5],[3,4],[5,6]]
Run Code Online (Sandbox Code Playgroud)

为什么会这样?使用改变数组的数组方法会发生此行为.

javascript

8
推荐指数
1
解决办法
240
查看次数

在角度2中创建深层副本

如何在角度2中创建深层副本,我尝试使用let newObject = Object.assign({}, myObject)但仍然myObject反映了在newObject中完成的所有更改.

angularjs angular

8
推荐指数
1
解决办法
6298
查看次数

在javascript中复制关联数组?

我有以下代码用于将一个关联数组复制到其他,

<script>

var some_db = new Array();

some_db["One"] = "1";

some_db["Two"] = "2";

some_db["Three"] = "3";

var copy_db = new Array();

alert(some_db["One"]);

copy_db = some_db.slice();

alert(copy_db["One"]);


</script>
Run Code Online (Sandbox Code Playgroud)

但第二个警报说"未定义"..我在这里做错了吗?任何指针请..

javascript associative-array

7
推荐指数
1
解决办法
1万
查看次数

javascript中的重复对象

我看到两种复制对象的方法

1.

var a={c:1}
var b=a;
alert(b.c);//alert 1
Run Code Online (Sandbox Code Playgroud)

2.

var a={c:2};
var b={};
for (i in a)
{b[i]=a[i];} 
alert(b.c);//alert 1
Run Code Online (Sandbox Code Playgroud)

第一个比第二个短,那么第二个例子的效率是多少?

javascript object

7
推荐指数
2
解决办法
1万
查看次数