我有字符串var obj = {presentation: {launchBehavior: 'newWindow'}}
,需要反序列化为对象:
function des(obj, property, index, ar) {
var isLastCall = ar.length - 1 === index;
if (isLastCall) {
return;
}
var isNextLastCall = ar.length - 2 === index;
if (isNextLastCall) {
obj[property] = ar[ar.length - 1];
return obj;
} else {
obj[property] = {};
return obj[property];
}
}
var obj = {};
"presentation.launchBehavior.newWindow".split(".").reduce(des, obj);
obj.presentation.launchBehavior // newWindow
dot之后的最后一个字符串应该是value,而其他字符串应该转换为字符串。我已经写了这样做的功能:
<p align="center"><img src="http://www.ifn-modern.com/skin/frontend/fortis/default/images/phone.png" alt="" width="50" height="50">
Lorem .</p>
p img{
display:inline-block;
vertical-align:middle;
margin-right:5px;
}
它正在工作,但我想改进它以返回结果对象而不必在函数外创建变量。我怎样才能做到这一点?也许功能的内部也可以改进。
答案 0 :(得分:2)
您可以使用(*foo)[i][j]
:
reduceRight
答案 1 :(得分:1)
我会这样做。
function des(str) {
var props = (typeof str === "string") ? str.split('.') : str;
return props.length > 1 ? {[props[0]]: des(props.slice(1))}
: props[0];
}
console.log(des("presentation.launchBehavior.newWindow"));
&#13;
它使用数组计算属性(var o = {[key]: val}
)。它可能无法在旧浏览器上运行。对于旧浏览器,您必须首先创建对象assign then属性(var o = {}; o[key] = val;
)。