我正在为客户建立一家小商店,并将信息存储为一组对象。但是我想确保不创建“重复的”对象。我见过类似的解决方案,但是也许这是我的“新颖性”,使我无法在自己的代码中实现要点,因此我想针对自己的工作提出一些建议。
我尝试将代码放入if外观中,如果代码中没有寻找零件编号的变量“ part”,然后添加该零件,则无法使它起作用。
这是我正在使用的功能:
function submitButton(something) {
window.scroll(0, 0);
cartData = ($(this).attr("data").split(','));
arrObj.push({
part: cartData[0],
description: cartData[1]
});
}
arrObj被定义为全局变量,这是我在这里使用的内容,带有“ part”和“ description”,这是我试图从其他地方保存并输出到“ #cart”的数据。我的那部分工作正常,我只想确保用户不能两次添加相同的项目。 (或多次)。
对不起,如果我的代码伪劣或我看起来很愚昧;我目前是一名试图解决这些问题的学生,因此大多数JS和Jquery对我来说都是全新的。谢谢。
答案 0 :(得分:0)
您可以创建一个proxy
并使用Map
来保存和访问值,诸如此类
let cart = new Map([{ id: 1, title: "Dog toy" }, { id: 2, title: "Best of Stackoverflow 2018" }].map(v=>[v.id,v]));
let handler = {
set: function(target,prop, value, reciver){
if(target.has(+prop)){
console.log('already available')
} else{
target.set(prop,value)
}
},
get: function(target,prop){
return target.get(prop)
}
}
let proxied = new Proxy(cart, handler)
proxied['1'] = {id:1,title:'Dog toy'}
proxied['3'] = {id:3,title:'Dog toy new value'}
console.log(proxied['3'])
答案 1 :(得分:0)
假设“ part”属性在每个cartData上都是唯一的,那么我仅基于该属性进行检查。
function submitButton(something) {
window.scroll(0, 0);
cartData = ($(this).attr("data").split(','));
if(!isDuplicate(cartData))
arrObj.push({
part: cartData[0],
description: cartData[1]
});
}
const isDuplicate = (arr) => {
for(obj of arrObj){
if(arr[0] === obj.part)
return true;
}
return false;
}
如果要同时检查'part'和'description'属性,则可以用if(arr[0] === obj.part && arr[1] === obj.description)
替换if语句。
答案 2 :(得分:0)
感谢大家的建议。使用此方法并在朋友的帮助下,这是有效的解决方案:
function submitButton(something) {
window.scroll(0,0);
cartData = ($(this).attr("data").split(','));
let cartObj = {
part: cartData[0],
description: cartData[1],
quantity: 1
}
match = false
arrObj.forEach(function(cartObject){
if (cartObject.part == cartData[0]) {
match = true;
}
})
console.log(arrObj);
if (!match) {
arrObj.push(cartObj);
}
答案 3 :(得分:-1)
好的,您有多种可能的解决方法。所有这些都需要您在用户可以添加的项目上指定某种标识符。通常,这只是一个ID整数。
因此,如果您有该整数,则可以执行以下检查以确保它不在对象数组中:
let cart = [{ id: 1, title: "Dog toy" }, { id: 2, title: "Best of Stackoverflow 2018" }];
function isInCart(id) {
return cart.some(obj => obj.id === id);
}
console.log(isInCart(1));
console.log(isInCart(3));
另一种方法是按ID将项目保存在对象中
let cart = { 1: { title: "Dog toy" }, 2: { title: "Best of Stackoverflow 2018" } };
function isInCart(id) {
if(cart[id]) return true;
return false;
}
答案 4 :(得分:-1)
尝试使用indexOf
检查对象是否存在,例如:
var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('aaa'));
// expected output: -1