从array-Javascript动态插入和检索键值对
正在尝试将动态键和值插入html页面中的数组对象从array-Javascript动态插入和检索键值对,javascript,arrays,Javascript,Arrays,正在尝试将动态键和值插入html页面中的数组对象 var answers=[]; $(".btn-like, .btn-dislike").click(function() { var $this = $(this); var value = $this.text(); var inter_data_type = $this.parent().attr('id'); if(!inter_data_type i
var answers=[];
$(".btn-like, .btn-dislike").click(function() {
var $this = $(this);
var value = $this.text();
var inter_data_type = $this.parent().attr('id');
if(!inter_data_type in answers) {
answers.push({"inter_data_type":value});
}
alert(answers); //displaying [object][object]
alert(answers.inter_data_type); // displaying undefined
});
插入前需要检查数组中是否存在键,如果存在键和值则无需插入,如果键相同而值不同,则需要替换特定键的值。但是上面的代码不起作用。
即使它插入到数组中,也无法获取值。尝试警报(回答[0]。内部数据类型)
答案是一个数组,所以你必须说出你感兴趣的元素。您可以通过提供数字索引来实现这一点
我建议使用它进行更好的可视化
console.debug(answers);
试着跟随
answers.push({"inter_data_type":"value"});
alert(answers[0].inter_data_type); // displaying undefined
根据对问题所做的编辑,并期望问题期望动态键、动态值以及“if”语句检查答案中inter_data_type的动态值。以下是工作脚本
var answers=[];
$(".btn-like, .btn-dislike").click(function() {
var $this = $(this);
var value = $this.text();
var inter_data_type = $this.parent().attr('id');
if(!(inter_data_type in answers)) { // Please note the extra brackets used here
answers[inter_data_type] = value;
}
alert(answers); // It will display ["Some inter data": "Some Val"]
alert(answers[inter_data_type]); // It will display "Some val"
});
您正在使用键值对(它是JSON)在数组中插入数据。所以,如果您想让它处于警报状态,那么您必须这样做,并检查键或值是否存在 希望对你有帮助。享受编码
var answers=[];
var value = $this.text();
var inter_data_type = $this.parent().attr('id');
for(var i = 0; i < answers.length; i++){
if(answers.hasOwnProperty(i)){
for(var prop in answers[i]){ // For get Key
if(answers[i].hasOwnProperty(prop)){
if(answers[i].hasOwnProperty(prop) == inter_data_type){ //For check key is same or not
if(answers[i][inter_data_type] != value){ // For check value is same or not
answers[i][inter_data_type] = value; // replace value if not same
}else{
}
}else{
answers.push({inter_data_type:value});
}
}
}
}
alert(JSON.stringify(answers));
}
var answers=[];
var value=$this.text();
var inter_data_type=$this.parent().attr('id');
对于(变量i=0;i
我看了你的问题,意识到你要求的东西不是我原来想的。
但是试试这个:
var answers=[];
var value = $this.text();
var inter_data_type = $this.parent().attr('id');
var isThere = false;
for(var i=0; i<answers.length; i++)
{
if(answers[i].inter_data_type==inter_data_type)
{isThere=true;break;}
}
if(isThere===true){
answers.push({inter_data_type:inter_data_type, value:value});
}
console.debug(answers);
console.debug(answers[0].inter_data_type,answers[0].value);
var answers=[];
var value=$this.text();
var inter_data_type=$this.parent().attr('id');
var isThere=false;
对于(var i=0;i您可以尝试以下方法:
var answerMap = [];
if (answerMap["key_name"] == undefined) {
answerMap["key_name"] = value;
}
如果使用映射而不是数组,我们可以实现这一点
var answers={};
answers[inter_data_type]=value;
如果要使用n no of obj use forEach或map,则需要使用键来检索值。我估计OP正在查找动态key
,而value
answers
是一个数组。您正在将一个对象推到数组上。考虑一下,您需要首先访问数组元素。由于I中的错误,您的代码无法首先工作f语句,第二行是“访问数组的方式”。只需查看下面编辑的答案即可找到更正。如果使用映射而不是数组,我们可以实现这一点。var answers={};answers[inter_data_type]=值;您可以引用:现有代码混合使用变量作为键和静态字符串。第1行检查变量键是否存在。第2行使用括号表示法设置静态键值。第5行使用带点表示法的静态键。此外,将数组视为对象,这不是您应该使用数组的方式。在问题键本身是静态的,只能使用静态键访问。这就是为什么说“如果您想以相同的方式访问数组…”进行了编辑,假设问题需要动态键、动态值以及“如果”语句检查答案中inter_data_type的动态值。我猜这就是问题背后的意图。