给对象附加子节点
Javascript: attach child several deep to object?
如果我想像这样遍历一个列表:
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的子节点,而不是孙节点
- js循环遍历单击的元素子节点
- 如何将数据添加到json的子节点
- 删除HTML节点而不删除其子节点
- JavaScript—父类和子类/对象的此问题
- 如何在javascript DOM api中获取具有给定条件的子节点
- 仅使用某些子节点访问xml中父节点的子节点
- 检测单击子节点并发送槽事件处理程序
- 从 d3.js 中的树中选择节点的子节点
- 访问所选剑道树视图节点的子节点
- 为什么正文标记后的脚本标记在子节点中计数
- 从对象变量中获取子节点
- 如何从 Javascript 对象中删除所有子节点
- 获取对象树中给定节点的子节点
- 您将如何将 JSONPath 发送到 JSON 对象数组中的所有子节点
- Javascript隐藏对象元素数据值的子节点
- 给对象附加子节点
- 如何在对象内部搜索子节点,并在找到时返回相关路径
- NodeJS不能访问子节点中的对象作用域
- 在Jquery中获取同名表单元素的内容.访问对象的子节点