我有一个字符串,例如:
convert.lamp.stamp.glass.nose
我想创建一个对象键'nose'(坦克对象已经创建):
tank['convert']['lamp']['stamp']['glass']['nose']
我该怎么做?
我使用split
获得了数组values = 'convert.lamp.stamp.glass.nose'.split('.');
现在我不知道如何使用jquery的每个方法来创建这些键。
答案 0 :(得分:1)
您可以拆分字符串并将其用作对象的键。
此提案使用
String#split
Array#reduce
v || {}
。
var object = { convert: { lamp: { stamp: { glass: { nose: 42 } } } } },
path = 'convert.lamp.stamp.glass.nose',
value = path.split('.').reduce(function (v, k) {
return (v || {})[k];
}, object);
console.log(value);

ES6
var object = { convert: { lamp: { stamp: { glass: { nose: 42 } } } } },
path = 'convert.lamp.stamp.glass.nose',
value = path.split('.').reduce((v, k) => (v || {})[k], object);
console.log(value);

使用给定的键创建对象时,可以使用此
var object = {},
path = 'convert.lamp.stamp.glass.nose'.split('.'),
last = path.pop();
path.reduce(function (o, k) {
o[k] = o[k] || {};
return o[k];
}, object)[last] = 42;
console.log(object);

ES6
var object = {},
path = 'convert.lamp.stamp.glass.nose'.split('.'),
last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = 42;
console.log(object);

答案 1 :(得分:0)
您可以执行以下操作,但是您还应该为此处的nose
最后一个属性提供值。我为这个名为Object.prototype.setNestedValue()
做了一个Object.prototype方法,它允许你动态地完成这项工作。它将使用一个字符串或整数数组,它们将用作嵌套属性,数组中的最后一项将用作值。如果数组项是整数,则会生成数组对象。
Object.prototype.setNestedValue = function(...a) {
a.length > 2 ? typeof this[a[0]] === "object" && this[a[0]] !== null ? this[a[0]].setNestedValue(...a.slice(1))
: (this[a[0]] = typeof a[1] === "string" ? {} : new Array(a[1]),
this[a[0]].setNestedValue(...a.slice(1)))
: this[a[0]] = a[1];
return this;
};
var tank = {};
props = "convert.lamp.stamp.glass.nose".split(".");
props.push(100) // lets assign a value to the nose property
tank.setNestedValue(...props);
console.log(JSON.stringify(tank,null,2));