gpt4 book ai didi

Javascript:将子对象附加到对象的几个深度?

转载 作者:行者123 更新时间:2023-12-03 08:52:56 24 4
gpt4 key购买 nike

如果我想迭代这样的列表:

var inputArray = [
'CHILD0',
'PARENT0_CHILD1',
'PARENT1_PARENT2_CHILD2',
'PARENT1_PARENT3_CHILD3',
'PARENT1_PARENT3_CHILD4'
];

并让它返回一个像这样的对象:

var resultObject = {
CHILD0: null,
PARENT0: {CHILD1: null},
PARENT1: {
PARENT2: {CHILD2: null},
PARENT3: {
CHILD3: null,
CHILD4: null
}
}
};

如何迭代数组以返回结果?

我有这样的东西:

function iterateArray (inputArray) {
var _RESULT = {};

for (var i = 0; i < inputArray.length; i += 1) {
var _inputName = inputArray[i];
var _inputNameArray = _input.split('_');
var _ref;

for (var n = 0; n < _inputNameArray.length; n += 1) {
//...?
}

_RESULT[_ref] = null;
}

return _RESULT;
}

var resultObject = iterateArray(inputArray);

现在不知道该怎么办。我想我可能需要某种递归函数。想法?

最佳答案

对代码进行最少的更改:

function iterateArray (inputArray) {
var _RESULT = {};

for (var i = 0; i < inputArray.length; i += 1) {
var _inputName = inputArray[i];
var _inputNameArray = _inputName.split('_');
var _ref = _RESULT;

for (var n = 0; n < _inputNameArray.length - 1; n += 1) {
if (!_ref[_inputNameArray[n]]) _ref[_inputNameArray[n]] = {};
_ref = _ref[_inputNameArray[n]];
}

_ref[_inputNameArray[n]] = null;
}

return _RESULT;
}

你永远需要递归,因为它总是可以展开到迭代中(反之亦然)。有时事情会以某种方式变得更好。

编辑:所有下划线是怎么回事? :)

EDIT2:理解这一点的关键是引用共享。例如:

  • 对于 CHILD0 , _ref = _RESULT意味着两个变量都指向相同的 {} 。当你这样做时_ref['CHILD0'] = null ,与 _RESULT['CHILD0'] = null 相同.

  • 对于 PARENT0_CHILD1 ,第一个_ref = _RESULT如上所述,所以_ref['PARENT0'] = {}_RESULT['PARENT0'] = {} 相同。然后我们切换_ref的含义与 _RESULT['PARENT0'] 相同;当我们分配_ref['CHILD1'] = null时,与分配 _RESULT['PARENT0']['CHILD1'] = null 相同.

关于Javascript:将子对象附加到对象的几个深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32618602/

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