如何防止对象添加重复值并停止执行函数



嘿,伙计们,我正在将数据作为对象添加到数组中,但我想如果有任何重复的项代码,则停止执行函数并返回,如果条件为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;
}
}

如果您要修改数组而不仅仅是添加元素,那么这个实现也会变得复杂

您可以将data数组映射到itemCodes,并查看它是否包含新项的itemCode,如果包含,则为构造函数返回一个空对象。然后,在addItem函数中,如果对象为空,则可以选择不将对象添加到数组中。

var item = function(name,itemCode,stock){
if (data.map(i => i.itemCode).includes(itemCode)) {
alert("This item has a duplicate itemCode");
return this;
}
this.name = name;
this.itemCode = itemCode;
this.stock = stock;
}

var data = [];

function addItem(name,itemCode,stock){
var Newitem = new item(name,itemCode,stock);
if (Newitem.name) data.push(Newitem); // check if an object was created with properties
}

addItem('BlueTee',100,50);
addItem('Yellow tee',101,100);
addItem('BrownTee',102,120);
addItem('RedTee',100,70); // this won't be added because of duplicate itemCode
console.log(data); // only contains BlueTee, Yellow tee, and BrownTee objects

最新更新