gpt4 book ai didi

javascript - 按命名空间转换对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:42 26 4
gpt4 key购买 nike

我需要像这样转换“平面对象”(输入数据):

{
'prop1': 'value.1',
'prop2-subprop1': 'value.2.1',
'prop2-subprop2': 'value.2.2',
}

像这样浸入物体(输出数据):

{
'prop1': 'value.1',
'prop2': {
'subprop1': 'value.2.1',
'subprop2': 'value.2.2'
}
}

当然,解决方案必须为无限深级别做好准备。

我的解决方案不起作用:

var inputData = {
'prop1': 'value.1',
'prop2-subprop1': 'value.2.1',
'prop2-subprop2': 'value.2.2',
};

function getImmersionObj(input, value) {
var output = {};

if ($.type(input) === 'object') { // first start
$.each(input, function (prop, val) {
output = getImmersionObj(prop.split('-'), val);
});
} else if ($.type(input) === 'array') { // recursion start
$.each(input, function (idx, prop) {
output[prop] = output[prop] || {};
output = output[prop];
});
}

return output;
}

console.log(getImmersionObj(inputData)); // return empty object

你能帮我找到我的代码中的问题,或者你知道另一个更好的转换算法吗?

最佳答案

您可以使用一个函数来拆分值的路径并为其生成新对象。

function setValue(object, path, value) {
var way = path.split('-'),
last = way.pop();

way.reduce(function (o, k) {
return o[k] = o[k] || {};
}, object)[last] = value;
}

var object = { 'prop1': 'value.1', 'prop2-subprop1': 'value.2.1', 'prop2-subprop2': 'value.2.2' };

Object.keys(object).forEach(function (key) {
if (key.indexOf('-') !== -1) {
setValue(object, key, object[key]);
delete object[key];
}
});

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按命名空间转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com