2016-09-13 14 views
-1

2つの別々の選択リストからjsonオブジェクトに配列を追加すると、 。私は選択リストからの項目を選択しているとき、私は私の予想出力を得るJsonオブジェクトに配列を追加すると、配列の値が1つの配列ではなく配列に出力されます(Jqueryを使用)

:私はさらに下に説明します。それが事実だときは、このコードが実行されます。

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; 

ありがとう、ありがとう。

+1

'new Array($("#selectList1 ")。$("#selectList2 ")$("#selectList2 ")。 – depperm

+1

[' Array.concat() '](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) – strah

+1

リストから1つの項目だけを選択する場合は、なぜマルチ選択を使用していますか? ? – Barmar

答えて

0

おかげで、あなたの提案のための@depperm:

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

それが働いた。..

+1

あなたは 'new Array()'は必要ありません。配列リテラル '$("#selectList1 ")を書くだけです。 ' – Barmar

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 || []ハックを避けます。

関連する問題