En prolongement de la réponse acceptée fournie par @bpmason1, pour prendre en charge les tableaux dans le chemin de la chaîne, par exemple le chemin de la chaîne peut être 'db.mongodb.users[0].name'
et 'db.mongodb.users[1].name'
.
Cela définira la valeur de la propriété, qui, si elle n'existe pas, sera créée.
var obj = {};
function set(path, value) {
var schema = obj;
var keysList = path.split('.');
var len = keysList.length;
for (var i = 0; i < len - 1; i++) {
var key = keysList[i];
// vérifier si la clé représente un élément de tableau, par exemple users[0]
if (key.includes('[')) {
// obtenir le nom de la propriété 'users' à partir de la clé 'users[0]'
var propertyName = key.substr(0, key.length - key.substr(key.indexOf("["), key.length - key.indexOf("[")).length);
if (!schema[propertyName]) {
schema[propertyName] = [];
}
// schema['users'][obtenir l'index 0 de 'users[0]']
if (!schema[propertyName][parseInt(key.substr(key.indexOf("[") + 1, key.indexOf("]") - key.indexOf("[") - 1))]) {
// s'il n'existe pas, le créer et l'initialiser
schema = schema[propertyName][parseInt(key.substr(key.indexOf("[") + 1, key.indexOf("]") - key.indexOf("[") - 1)]] = {};
} else {
schema = schema[propertyName][parseInt(key.substr(key.indexOf("[") + 1, key.indexOf("]") - key.indexOf("[") - 1))];
}
continue;
}
if (!schema[key]) {
schema[key] = {};
}
schema = schema[key];
} // loop ends
// si la dernière clé est un élément de tableau
if (keysList[len - 1].includes('[')) {
// obtenir le nom de la propriété 'users' à partir de la clé 'users[0]'
var propertyName = keysList[len - 1].substr(0, keysList[len - 1].length - keysList[len - 1].substr(keysList[len - 1].indexOf("["), keysList[len - 1].length - keysList[len - 1].indexOf("[")).length);
if (!schema[propertyName]) {
schema[propertyName] = [];
}
// schema[users][0] = value;
schema[propertyName][parseInt(keysList[len - 1].substr(keysList[len - 1].indexOf("[") + 1, keysList[len - 1].indexOf("]") - keysList[len - 1].indexOf("[") - 1))] = value;
} else {
schema[keysList[len - 1]] = value;
}
}
// créer si n'existe pas
set("mongo.db.users[0].name.firstname", "hii0");
set("mongo.db.users[1].name.firstname", "hii1");
set("mongo.db.users[2].name", {
"firstname": "hii2"
});
set("mongo.db.other", "xx");
console.log(obj);
// définira si existe
set("mongo.db.other", "yy");
console.log(obj);