Javascript 将数组添加到Json对象会输出数组数组,而不是一个值数组(使用Jquery)
当从两个单独的选择列表向json对象添加数组时,我得到的是一个数组数组,而不是一个包含所有值的数组。我将在下面进一步解释: 当我从一个选择列表中选择了两个项目时,我得到了预期的输出。在这种情况下,此代码将运行: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
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]]