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

Why an object key's first value is treated as a string - AngularJs

本文关键字:字符串 AngularJs 对象 第一个 为什么      更新时间:2023-09-26

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

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

例:

item[]="123";

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

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

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

item[] = ["123"]

我该怎么做?

附言 - 这个对象是从查询字符串参数创建的,如 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
这是因为

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

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

//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"

试试这个

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

我已经解决了-

if(typeof param['item[]'] == "string"){
    param['item[]'] = [param['item[]']];
}
首先,我

正在检查键是否有字符串值,如果它是字符串,那么我将其转换为数组并且它起作用了。

这是工作小提琴——

https://jsfiddle.net/r3vrxzup/