如何在Javascript中增加对象内部的唯一值
这是我关于stackoverflow的第一个问题如何在Javascript中增加对象内部的唯一值,javascript,jquery,Javascript,Jquery,这是我关于stackoverflow的第一个问题 $("button").click(function(){ var text = "<ul>"; var item = $(".inputvalue").val(); var n = checkvalue(myArray, item); if (!n) { myArray.push(item); } else { counter++; } for (var i = 0; i &l
$("button").click(function(){
var text = "<ul>";
var item = $(".inputvalue").val();
var n = checkvalue(myArray, item);
if (!n)
{
myArray.push(item);
}
else
{
counter++;
}
for (var i = 0; i < myArray.length; i++)
{
var valuetostring = "class" + i.toString();
text += "<li class=" + valuetostring + ">" + myArray[i] + " x " + counter + "</li>";
}
$("#counter").text(counter);
document.getElementById("output").innerHTML = text;
});
$(“按钮”)。单击(函数(){
var text=“”;
var item=$(“.inputvalue”).val();
var n=校验值(myArray,item);
如果(!n)
{
myArray.push(项目);
}
其他的
{
计数器++;
}
对于(var i=0;i“+myArray[i]+“x”+计数器+””;
}
$(“#计数器”)。文本(计数器);
document.getElementById(“输出”).innerHTML=text;
});
我需要此解决方案,以便在键入新值时向数组中添加唯一值。如果输入了相同的值,则值后的数字应增加1
像这样:
- 沙发x1
- 枕头×4
- 主席x1
- 表X3
你能帮帮我吗?谢谢。如果您正在使用jQuery,那么您应该继续使用该api,而不是同时使用原生api和jQuery,并且您真的应该为变量指定有意义的名称,以便将来您以及查看您的代码的其他人更容易使用 此代码的主要优点是,您可以使用对象文字
{}
来存储添加的项目及其计数。所有项目都是唯一的,因为对象不能有重复的键
//使用对象存储项目
常量项={};
常量$input=$('.inputvalue')
常量$output=$(“#output”)
//创建一个包含您的物品及其数量的ul
函数渲染(项目){
常量$ul=$(“”)
$。每个(项目、功能(键、值){
$ul.append($(`li>${key}x${value}`))
})
退货$ul
}
$(“.run1”)。单击(函数(e){
//从输入字段中获取值
常量项=$input.val()
//如果输入返回中没有项目,则不执行任何操作
如果(项目==''){
//您可以在此处显示错误消息
返回错误
}
//如果不存在项目的密钥,请创建它
如果(!项[项]){
//初始化为0
项目[项目]=0
}
//增加你的数量,我们可以确保我们在这一点上有一个项目
项目[项目]+=1
//渲染输出
$output.html(
渲染(项目)
)
console.log('items',items)
});代码>
运行1
您可以尝试使用如下对象,然后访问该对象进行显示,而不是使用数组。请记住,这是一个精简版本,您需要验证输入,确保其格式适合作为对象键
var inputObj={};
变量项=函数(输入){
if(inputObj[input]==未定义){
inputObj[input]=1;
}
否则{
inputObj[input]+=1;
}
}
参赛作品(“你好”);
条目(“再见”);
参赛作品(“你好”);
//key,为您提供onject中所有键的数组
console.log(Object.keys(inputObj))
//显示整个对象的键特性对
Object.keys(inputObj).forEach(函数(键){
log(key,inputObj[key]);
});
//访问个人属性
console.log(“Hello Property=,inputObj.Hello)
已测试并正常工作!
请查看代码注释,并利用reduce
函数获取数组中元素的总和
//全局变量
常数arr=[];
$('.run1')。单击(函数(){
让val=$('.inputvalue').val(),
计数器=美元(“#计数器”),
outputEl=$(“#output”),
outputHtml='',
obj={};
//消毒
val=$.trim(val);
//处理空值时不执行任何操作
如果(!val){
返回;
}
//将值添加到主数组中
arr.push(val);
//创建包含总计的对象
obj=arr.REDUCT(功能(累计,项目){
如果(累计[项目]){
累计[项目]+=1;
}否则{
累计[项目]=1;
}
累积收益;
}, {});
//构建HTML
$。每个(对象、功能(键、计数){
outputtml+=''+key+'x'+count+' ';
});
//打印HTML并更新计数器
html(outputtml);
计数器文本(arr.length);
});代码>
.box{
填充:20px;
边框:1px实心#ccc;
显示:内联块;
浮动:左;
边缘底部:20px;
}
/*为按钮设置此光标始终是一个很好的做法*/
.run1{
光标:指针;
}
运行1
很难理解您的代码。如果您为foo、counter、bool和bar选择有意义的变量名,这会有所帮助代码>如果删除所有与html相关的代码,只保留有问题的部分,也会更容易提供帮助。