Javascript pureComputed元素中不允许重复
具有此元素(注意计算字段)Javascript pureComputed元素中不允许重复,javascript,html,knockout.js,knockout-2.0,Javascript,Html,Knockout.js,Knockout 2.0,具有此元素(注意计算字段)fullNumber var NumberField = function () { var self = this; self.maskFormat = "0"; self.firstNumber = ko.observable(""); self.secondNumber = ko.observable(""); self.thirdNumber = ko.observable(""); self.fourthNumber = ko.obse
fullNumber
var NumberField = function () {
var self = this;
self.maskFormat = "0";
self.firstNumber = ko.observable("");
self.secondNumber = ko.observable("");
self.thirdNumber = ko.observable("");
self.fourthNumber = ko.observable("");
self.fifthNumber = ko.observable("");
self.fullNumber = ko.pureComputed(function() {
return [
self.firstNumber,
self.secondNumber,
self.thirdNumber,
self.fourthNumber,
self.fifthNumber ].map(ko.unwrap);
}
}
然后我使用它,就像:
<div class="numberFields" data-bind="with: numbers">
<input id="0" class="number-ball" maxlength="2" type="tel" data-bind="twoDigits: firstNumber, maxNumber: 68">
<input id="1" class="number-ball" maxlength="2" type="tel" data-bind="twoDigits: secondNumber, maxNumber: 68">
<input id="2" class="number-ball" maxlength="2" type="tel" data-bind="twoDigits: thirdNumber, maxNumber: 68">
<input id="3" class="number-ball" maxlength="2" type="tel" data-bind="twoDigits: fourthNumber, maxNumber: 68">
<input id="4" class="number-ball" maxlength="2" type="tel" data-bind="twoDigits: fifthNumber, maxNumber: 68">
</div>
如何确保
fullNumber
中没有重复的值?在您的计算机中,您可以链接所有类型的函数,这些函数将映射到您的数字上。基本上,你要做三件事:
通过调用ko.unwrap
,从observable
移动到Number
检查展开的值是否已经存在,即:filter uniques
确保数组中没有可能由空输入导致的丑陋的null
或未定义的值
在纯javascript中,但具有一些“现代”功能(Array.from
,Set
):
var uniques=函数(arr){
//有许多独特方法的实现。
//谷歌/搜索“独特的js值”了解更多信息
返回数组.from(新集合(arr));
};
var arrUnwrap=函数(arr){
返回arr.map(ko.unwrap);
};
var truethyValues=函数(arr){
返回arr.filter(函数(val){
返回val;
});
};
变量NumberField=函数(){
var self=这个;
self.maskFormat=“0”;
self.firstNumber=ko.可观察(“”);
self.secondNumber=ko.可观察(“”);
self.thirdNumber=ko.可观察(“”);
自身第四个数字=可观察的高度(“”);
self.fifthNumber=ko.可观察(“”);
变量编号=[
self.firstNumber,
self.secondNumber,
第三个号码,
第四个号码,
第五个号码];
//从右到左读:
//fullNumber是:未包装、唯一、真实的数字
self.fullNumber=ko.pureComputed(函数(){
返回真值(唯一值(arrenwrap(数字));
});
}
ko.applyBindings(newnumberfield())代码>
当存在副本时,您想做什么?替换它?Returnnull
?@user3297291只需将其留空(或null),也请检查更新,我添加了html alsounderscore js的uniq函数。uniq([1,2,1,4,1,3]);=>[1, 2, 4, 3]