为什么对象键的第一个值被视为字符串 - AngularJs

时间:2016-02-08 06:51:11

标签: javascript arrays angularjs object key

我有一个名为" param"的对象它有一个名为" item []"的键。 item []的值是动态插入的。

问题是" item []"它有一个值,它将该值视为字符串而不是数组的第一个索引。

示例:

item[]="123";

但是当它有多个值时,它会将自己视为一个所需的数组,例如 -

item[] = ["123","456"];

我希望单个值也作为此数组的索引,如

item[] = ["123"]

我该怎么做?

P.S。 - 这个对象是从http://example.com/def?item[]=123&item[]=456之类的查询字符串参数创建的,然后当我提取查询字符串时,它将这些参数作为对象的键返回

我以这种方式提取查询字符串(Javascript) -

var param = $location.search();
console.log('Param');      
console.log(param);//Returns Object{item[]=[2]} in console

3 个答案:

答案 0 :(得分:3)

这是因为variableName[]不是javascript语法 由于它不识别[],如果它没有抛出错误,它可能是名称的一部分。

要创建数组,您有两种可能:

//Contsructor
var ar = new Array(); //empty array
//Literal
var ar = []; //same as above
var ar = [0,1,2,3]; //array of length 4
var ar = new Array(4); //empty array of length 4

访问或设置

var ar[0] = "value"

答案 1 :(得分:1)

试试这个

queryString = ["123"];
queryString = ["123","432","456"];
if(queryString.length==1){
   item.push(queryString[0]);
}else{
  angular.forEach(queryString,function(value,key){
       item.push(value);//push only value
  })
}

答案 2 :(得分:0)

我已经解决了 -

if(typeof param['item[]'] == "string"){
    param['item[]'] = [param['item[]']];
}

首先我检查密钥是否有字符串值,如果是字符串,那么我将其转换为数组并且它有效。

这是工作小提琴 -

https://jsfiddle.net/r3vrxzup/