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())
    
    
    
    当存在副本时,您想做什么?替换它?Return
    null
    ?@user3297291只需将其留空(或null),也请检查更新,我添加了html alsounderscore js的uniq函数。uniq([1,2,1,4,1,3]);=>[1, 2, 4, 3]