当从两个单独的选择列表向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;
感谢任何帮助,谢谢。
答案 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])
它有效..