如何防止对象添加重复值并停止执行功能

阿泽兹

大家好,我正在将数据作为对象添加到数组中,但是我想查看是否有重复的项目代码,因此它停止执行该函数并返回,并且如果条件为true,则它采用构造函数值并将其添加到数据结构中

这是我试图阻止它增加价值的方法,但是我无法按需使用

function getNo(b){
for (const [key, value] of Object.entries(data)) {
  let val = value.itemCode;
   if(b === val){
    alert('Its equalt to item code');
     break;}else{ return b;};
}}

----我想要的是----- 1)检查itemCode构造函数中的值是否重复2)如果其值重复,则它应该显示并警告并停止执行该函数3)并添加此函数进入addItem函数以检查其重复与否4)我将值存储在数据数组中

   var item = function(name,itemCode,stock){
        this.name = name;
        this.itemCode = itemCode;
        this.stock = stock;
    }
    
    var data = [];
    
    function addItem(name,itemCode,stock){
        var Newitem = new item(name,itemCode,stock);
        data.push(Newitem);
    }
    
    addItem('BlueTee',100,50);
    addItem('Yellow tee',101,100);
    addItem('BrownTee',102,120);

肯特纳

有多种处理方法。您的选择应取决于其他用例。

最简单的方法是将数据定义为javascript对象而不是数组。这将需要每个对象的键。看起来像这样:

var data = {};

function addItem(name, itemCode, stock){
  var newItem = new item(name, itemCode, stock);
  if(data[itemCode] === undefined)
    data[itemCode] = newItem;
}

如果以后要以数组形式访问数据,则可以在每次插入时在数组上进行迭代。看起来像这样:

function addItem(name, itemCode, stock){
  var newItem = new item(name, itemCode, stock);
  if(!data.some(function(x => x.itemCode === itemCode)){
    data.push(newItem);
  }
}

这将比普通插入慢,尤其是对于大型数据集。如果您要使用非常大的数据集并且需要能够以数组形式访问,那么我将在两者之间使用混合形式。javascript对象将用于直接访问该对象。最好使用类类的实现,但是如果不使用oo,代码将如下所示:

var data = [];
var keys = {};

function addItem(name, itemCode, stock){
  var newItem = new item(name, itemCode, stock);
  if(keys[itemCode] === undefined){
    data.push(newItem);
    keys[itemCode] = data.length - 1;
  }
}

如果您要修改数组而不只是添加元素,则此实现也将变得复杂

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章