如何防止对象添加重复值并停止执行函数
How to prevent object to add duplicate value and stop excuting function
嘿伙计们,我正在将数据作为对象添加到数组中,但我想如果有任何重复的项目代码,那么它会停止执行该函数,并且 return 如果条件为真,那么它会采取构造函数值并将其添加到数据结构中
这是我试图阻止它添加值但它无法正常工作的方法
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);
您可以将 data
数组映射到 itemCodes 并查看它是否包含新项目的 itemCode,如果是,return 为您的构造函数提供一个空对象。然后在您的 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
有多种方法可以处理这个问题。您的选择应取决于其他用例。
最简单的方法是将数据定义为 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 对象将用于直接访问该对象。一个类似于 class 的实现将是首选,但如果不使用 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;
}
}
如果您不仅要修改数组而不仅仅是添加元素,此实现也会变得复杂
嘿伙计们,我正在将数据作为对象添加到数组中,但我想如果有任何重复的项目代码,那么它会停止执行该函数,并且 return 如果条件为真,那么它会采取构造函数值并将其添加到数据结构中
这是我试图阻止它添加值但它无法正常工作的方法
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);
您可以将 data
数组映射到 itemCodes 并查看它是否包含新项目的 itemCode,如果是,return 为您的构造函数提供一个空对象。然后在您的 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
有多种方法可以处理这个问题。您的选择应取决于其他用例。
最简单的方法是将数据定义为 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 对象将用于直接访问该对象。一个类似于 class 的实现将是首选,但如果不使用 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;
}
}
如果您不仅要修改数组而不仅仅是添加元素,此实现也会变得复杂