从array-Javascript动态插入和检索键值对

从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

正在尝试将动态键和值插入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 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的动态值。我猜这就是问题背后的意图。