我在knockout.js中有一个observable:
var test = ko.observable();
test({view: 'abc',model : 'newmodel'});
我想检查变量test
是否已包含:
{view: 'abc',model : 'newmodel'}
如果没有,我想添加条目。使用knockout.js时如何检查?
困难的部分是了解对象细节。
答案 0 :(得分:3)
您可以使用()
检索可观察量的当前值。即:
var currentValue = test();
要检查它是否引用了同一个对象,您可以使用===
运算符:
var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;
请注意,当您设置一个可观察的值时,knockout已经检查新值是否与旧值实际不同。如果它们相同,则淘汰赛不会通知任何订阅者(除非您明确告知)。
如果你想比较对象是否包含相同的键和值,你需要某种"深度比较"方法。 (How to determine equality for two JavaScript objects?)
我不确定你的意思"添加条目"。要设置新对象,请使用:
test(newValue);
如果您要将newValue
变量中的属性添加到test
的值,可以使用Object.assign
(make sure to check if your browser supports it)
var combinedValue = Object.assign(currentValue, newValue);
test(combinedValue);
Object.assign
会映射其所有参数'第一个参数对象的键和值。它会使用最新参数的值覆盖任何重复的键。
E.g:
var test = ko.observable({ a: 1, b: 1 });
var newValue = { b: 2, c: 3 };
test(Object.assign(test(), newValue));
console.log(test()); // Will print: { a: 1, b: 2, c: 3 }