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

Javascript 将数组添加到Json对象会输出数组数组,而不是一个值数组(使用Jquery),javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,当从两个单独的选择列表向json对象添加数组时,我得到的是一个数组数组,而不是一个包含所有值的数组。我将在下面进一步解释: 当我从一个选择列表中选择了两个项目时,我得到了预期的输出。在这种情况下,此代码将运行: var jsonObject = {}; jsonObject["someKey"] = $("#selectList1").val(); console.log(jsonObject); var jsonObject = {}; jsonObject["keys"] = new Ar

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

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

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

console.log(jsonObject);
控制台:

▼ Object {someKey: Array[2]}
    ▼ someKey: Array[2]
        0: "value1"
        1: "value2"
        length: 2
      ► __proto__:Array[0]
    ► __proto__: Object
▼ 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 jsonObject = {};
jsonObject["someKey"] = $("#selectList1").val();
console.log(jsonObject);
var jsonObject = {};
jsonObject["keys"] = new Array($("#selectList1").val(), $("#selectList2").val());

console.log(jsonObject);
控制台:

▼ Object {someKey: Array[2]}
    ▼ someKey: Array[2]
        0: "value1"
        1: "value2"
        length: 2
      ► __proto__:Array[0]
    ► __proto__: Object
▼ 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;

感谢您的帮助。

感谢@depperm提供您的建议:

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

它起作用了。

另一个需要注意的问题是,如果查询所选值返回空值,因为数组运算符[]或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 | |[]黑客攻击。

新数组$selectList1.val[0],$selectList2.val[0]如果您只想从列表中选择一项,请查看为什么要使用multi-select?@Barmar用户必须选择两项。从同一个列表中选择两个,或者从两个列表中选择一个。看起来像是一个混乱的用户界面。如果他从列表1中选择一个,从列表2中选择两个,它将忽略列表2中的第二个。您不需要新数组,只需编写一个数组文本[$selectList1.val[0],$selectList2.val[0]]