【问题标题】:Why an object key's first value is treated as a string - AngularJs为什么对象键的第一个值被视为字符串 - AngularJs
【发布时间】:2016-05-17 18:33:53
【问题描述】:

我有一个名为“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

【问题讨论】:

  • 那么这个对象是从哪里来的或者是如何创建的呢?如果没有更多的上下文,真的很难提供帮助。另外在属性名称中使用[] 有什么意义?
  • 更新了问题@charlietfl
  • 你不能只写 item[]="123";在 javascript 中它会给出 Uncaught SyntaxError: Unexpected token [(...)
  • 其实不是我写的。当 URL 具有单个查询参数时,它会返回类似的值。喜欢example.com/def?item[]=123
  • "那么当我提取查询字符串时" ...该代码在哪里?...显然这是需要修改的部分。

标签: javascript arrays angularjs object key


【解决方案1】:

这是因为 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"

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

      【解决方案3】:

      我已经解决了-

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

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

      这是工作小提琴 -

      https://jsfiddle.net/r3vrxzup/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-26
        • 2018-03-29
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多