Was dazu:
function setObj (str, value, obj) {
var ref = obj, keys = str.split('.');
while (keys.length) {
var currentKey = keys.shift();
ref[currentKey] = keys.length ? (ref[currentKey] ? ref[currentKey] : {}) : value;
ref = ref[currentKey];
}
}
Beispiel mit einem Eingabeobjekt mit (könnten einige Formularwerte mit $ .serializeArray extrahiert werden)
var serializedInputs = [
{name: 'fruits[1][name]', value: 'Banana'},
{name: 'fruits[1][id]', value: '1'},
{name: 'fruits[2][name]', value: 'Strawberry'},
{name: 'fruits[2][id]', value: '2'},
{name: 'fruits[3][name]', value: 'Raspberry'},
{name: 'fruits[3][id]', value: '3'},
{name: 'fruits[4][name]', value: 'Kiwi'},
{name: 'fruits[4][id]', value: '4'},
{name: 'fruits[5][name]', value: 'Mango'},
{name: 'fruits[5][id]', value: '5'},
{name: 'selected_fruit_id', value: '1'},
]
// This variable holds the result
var obj = {}
serializedInputs.forEach(function(item) {
// Turning square brackets into dot notation
setObj(item.name.replace(/\]/g, '').replace(/\[/g, '.'), item.value, obj);
})
Ergebnis
{
"fruits": {
"1": {
"name": "Banana",
"id": "1"
},
"2": {
"name": "Strawberry",
"id": "2"
},
"3": {
"name": "Raspberry",
"id": "3"
},
"4": {
"name": "Kiwi",
"id": "4"
},
"5": {
"name": "Mango",
"id": "5"
}
},
"selected_fruit_id": "1"
}
Wenn C ist eine Zeichenfolge, dann zu müssen Sie gehen, um zu versuchen, es manuell in ein Objekt zu analysieren. Ich kann fast garantieren, dass dies einfacher zu tun ist, wenn Sie die Zeichenfolge C erstellen, und Sie sollten kein manuelles Parsing durchführen müssen. Bitte zeigen Sie diesen Abschnitt des Codes, so kann ich sein – Undefined
Ist die Saite garantiert weiter helfen 'dot.separated.string = value' und welche Einschränkungen auf den Wert gesetzt werden? Ist es zum Beispiel ein JSON-Typ? –
Die Zeichenfolge wird als dot.se- perated garantiert, und es gibt keine Einschränkungen für den Wert. – Nemo