将值从observableArray传递给另一个,而不会相互引用

时间:2013-09-22 22:08:24

标签: javascript knockout.js

我正在尝试将值从一个observableArray传递到另一个而没有相互引用,正确知道我是否更改了它们同步的一个可观察数组值并且两者具有相同的值。

这是jsFiddle

的JavaScript

var test = ko.observableArray([1, 2, 3]);
var test2 = ko.observableArray(test());
test2()[0] = 2;
console.log(test());
console.log(test2());

输出:

[2,2,3]
[2,2,3]

预期:

[1,2,3]
[2,2,3]

1 个答案:

答案 0 :(得分:3)

尝试这样做:

var test2 = ko.observableArray(test().slice(0));

而不是:

var test2 = ko.observableArray(test());

这是创建基础数组的克隆的简单方法;现在你引用了相同的数组。

slice函数基本上选择从给定索引开始的元素(在本例中为0),并在数组长度的末尾(因为未指定)结束为新数组。

来自KnockoutJS

  

slice函数是observableArray等效的native   JavaScript切片功能(即,它返回数组的条目   从给定的起始索引到给定的结束索引)。调用   myObservableArray.slice(...)相当于调用相同的方法   在底层数组上(即myObservableArray()。slice(...))。

以下是JSFiddle的更新。