将数组添加到Json对象输出数组数组而不是一个值数组(使用Jquery)

时间:2016-09-13 18:48:21

标签: javascript jquery arrays json

当从两个单独的选择列表向json对象添加数组时,我得到一个数组数组,而不是一个包含所有值的数组。我将在下面进一步解释:

当我从一个选择列表中选择了两个项目时,我得到了预期的输出。在这种情况下,此代码运行:

var jsonObject = {};
jsonObject["someKey"] = $("#selectList1").val();
console.log(jsonObject);

控制台:

▼ Object {someKey: Array[2]}
    ▼ someKey: Array[2]
        0: "value1"
        1: "value2"
        length: 2
      ► __proto__:Array[0]
    ► __proto__: Object

所以上面的说法是正确的。但是,当我从两个单独的列表中选择一个项目时,此代码运行:

var jsonObject = {};
jsonObject["keys"] = new Array($("#selectList1").val(), $("#selectList2").val());

console.log(jsonObject);

控制台:

▼ Object {someKey: Array[2]}
    ▼ someKey: Array[2]
     ▼ 0: Array[1]
         0: "value1"
         length: 1
       ►__proto__: Array[0]
     ▼ 1: Array[1]
         0: "value2"
         length: 1
       ►__proto__: Array[0]
       length: 2
     ► __proto__:Array[0]
    ► __proto__: Object

以上不是我想要的输出。我也运行了这段代码,它会输出相同的不需要的输出:

var keys = [];
keys.push($("#selectList1").val());
keys.push($("#selectList2").val());

jsonObject["keys"] = keys;

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

您需要注意的另一个问题是,在选定值的查询返回空的情况下,因为数组运算符([])或concat将失败:

// Select first array of selected values.
// It can be null so we make it by default an empty array.
var selected = ($("#select-1").val() || [])
  // Then concatenate with second array of values
  .concat($("#select-2").val());

实现这一目标的另一种优雅方法是,首先查询选择,然后迭代它们的值:

var selected = $("#select-1,#select-2").map(function (i, select) {
    return $(select).val();
  }).toArray();

后者更具可读性,您可以避免maybeNotAnArray || []黑客攻击。

答案 1 :(得分:0)

感谢@depperm的建议:

new Array($("#selectList1").val()[0], $("#selectList2").val()[0])

它有效..