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

时间:2016-04-21 05:12:54

标签: javascript arrays

尝试将动态Key和值插入到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
    });

在插入之前需要检查密钥是否存在于数组中,如果密钥和值存在则不需要插入,如果密钥相同且值不同则需要替换特定密钥的值。但上面的代码不起作用。 即使它插入到数组中也无法获得该值。

7 个答案:

答案 0 :(得分:1)

尝试alert(answers[0].inter_data_type) 答案是一个数组,所以你必须说出你感兴趣的元素。你可以通过提供数字索引来实现。

我建议使用更好的可视化

console.debug(answers);

答案 1 :(得分:0)

尝试以下

answers.push({"inter_data_type":"value"});

alert(answers[0].inter_data_type); // displaying undefined

答案 2 :(得分:0)

您使用键值对将数据插入到数组中,它是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));
}

答案 3 :(得分:0)

我看着你的问题,意识到你要求的东西比我原先想的还要多。 但试试这个:

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);

答案 4 :(得分:0)

您可以尝试这种方式:

var answerMap = [];
if (answerMap["key_name"] == undefined) {
    answerMap["key_name"] = value;
}

答案 5 :(得分:0)

如果使用地图而不是数组,我们可以实现这一点。

var answers={}; 
answers[inter_data_type]=value;

答案 6 :(得分:-1)

根据对问题的编辑并期望问题需要动态密钥,动态值以及“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"
});