JS - 关联数组

时间:2015-10-04 11:31:43

标签: javascript arrays

Demo

为什么关联数组qaObj返回0长度?

 $(function(){
var data = "Q$:I am in.A$: out Q$:whats this A$:Answer";

alert("in");
var str = $.trim(data).replace(/(\r\n|\n|\r)/gm,"");
    var qaObj = new Array();
    if(str != null && str.indexOf("A$:") != -1 && str.indexOf("Q$:") != -1){
        var qaPairs = str.split("Q$:"); /**Eliminate first header part**/
        qaPairs.shift();
        alert(qaPairs);
        for(var counter = 0; counter < qaPairs.length; counter++){
            var qaSplittedArr = qaPairs[counter].split("A$:");
            qaObj[qaSplittedArr[0]] = qaSplittedArr[1];
        }
    }

   alert(qaObj);
   alert(qaObj["I am in."]);
 });

我无法将qaObj发送给php。它显示空数组。所以我无法循环。

为什么会这样?

我通过ajax发送。

2 个答案:

答案 0 :(得分:2)

qaObj在这里需要是一个对象({}),而不是一个数组(new Array())。 JavaScript objects是PHP关联数组的等价物。更新了小提琴:http://jsfiddle.net/p6p8jezu/4/

$(function(){
    var data = "Q$:I am in.A$: out Q$:whats this A$:Answer";

    var str = $.trim(data).replace(/(\r\n|\n|\r)/gm,"");
        var qaObj = {};
        if(str != null && str.indexOf("A$:") != -1 && str.indexOf("Q$:") != -1){
            var qaPairs = str.split("Q$:"); /**Eliminate first header part**/
            qaPairs.shift();
            alert(qaPairs);
            for(var counter = 0; counter < qaPairs.length; counter++){
                var qaSplittedArr = qaPairs[counter].split("A$:");
                qaObj[qaSplittedArr[0]] = qaSplittedArr[1];
            }
        }

    alert(JSON.stringify(qaObj));
    alert(qaObj["I am in."]);
});

答案 1 :(得分:1)

尝试使用 Javascript对象而不是数组。

new Array()更改为{}以制作对象。

var qaObj = {};

现在,您可以在此对象上执行您喜欢的类似PHP的关联数组赋值,并获得所需的结果:

qaObj[qaSplittedArr[0]] = qaSplittedArr[1];

在此DEMO中检查您的控制台。

请注意,将元素插入数组的推荐方法是使用.push()方法,而不是使用类似PHP的语法。