2016-09-13 4 views
-1

Beim Hinzufügen eines Arrays zu einem Json-Objekt aus zwei separaten Auswahllisten erhalte ich ein Array von Arrays anstelle von einem Array mit allen Werten . Ich werde erklären, weiter unten:Array zu Json hinzufügen Object gibt ein Array von Arrays anstelle von einem Array von Werten aus (mit Jquery)

ich meine erwartete Ausgabe, wenn ich zwei Elemente aus einer Auswahlliste ausgewählt haben. Wenn das der Fall ist, läuft dieser Code:

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

Konsole:

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

So ist die oben richtig ist. Aber wenn ich ein Artikel von zwei getrennte Listen wählen jeweils dieser Code ausgeführt wird:

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

console.log(jsonObject); 

Konsole:

▼ 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 

Die oben ist nicht meine gewünschte Ausgabe. Ich habe auch diesen Code ausgeführt, der den gleichen unerwünschten Ausgang ausgibt:

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

jsonObject["keys"] = keys; 

Jede Hilfe geschätzt, danke.

+1

'neues Array ($ (" # selectList1 "). Val() [0], $ (" # selectList2 "). Val() [0])' – depperm

+1

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

+1

Warum verwenden Sie Mehrfachauswahl, wenn Sie nur ein Element aus der Liste auswählen möchten ? – Barmar

Antwort

0

Dank @depperm für Ihren Vorschlag:

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

es funktioniert ..

+1

Sie brauchen nicht 'new Array()', schreiben Sie einfach ein Array-Literal '[$ (" # selectList1 "). Val() [0], $ (" # selectList2 "). Val() [0]] ' – Barmar

1

Ein weiteres Problem, mit denen Sie vorsichtig sein müssen, ist, in Fällen, in denen die Abfrage für ausgewählte Werte leer zurückgibt, da das Array Operator ([]) oder concat fehl:

// 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()); 

Another elegante Art und Weise, dies zu erreichen, die wählt zuerst werden die Abfrage könnte, dann sie für Werte iterieren:

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

Die später ist besser lesbar und Sie den maybeNotAnArray || [] Hack vermeiden.

Verwandte Themen