动态对象遍历与 NodeJS
Dynamic Object Traversing with NodeJS
我有一个存储对象,其中包含一个对象数据存储,如下所示:
data = {
name1: 'value1',
name2: 'value2',
child: {
name3: 'value3',
name4: 'value4'
}
}
我需要做的是传递数据变量、名称和值,并更新对象,如下所示:
update(data, 'name1', 'foobar');
这工作正常,但这里有一个问题:我需要能够发送一个点表示法名称并让它更新正确的子属性。例如:
update(data, 'child.name3', 'foobar');
这是我用来执行遍历的代码:
function update(data, fieldName, value) {
var field = data
var fieldNameParts = fieldName.split('.');
while (fieldNameParts.length)
field = field[fieldNameParts.shift()];
field = (value === undefined) ? null : value;
}
所以问题是"field"包含新值,但"data.child.name3"不包含。如何遍历和更新主数据对象?
关于如何解决这个问题的任何想法?
你迭代得太远了。只需向后迭代一步即可获取对对象的引用,然后在该对象上设置属性的值:
function update(data, fieldName, value) {
var field = data
var fieldNameParts = fieldName.split('.');
while (fieldNameParts.length > 1) // changed number of iterations
field = field[fieldNameParts.shift()];
field[fieldNameParts.shift()] = (value === undefined) ? null : value; // set value on property not on variable
}
你最初做的是:
var field = data.child.name3;
field = value;
你想做的(我在上面的代码中所做的)是:
var field = data.child;
field.name3 = value;
好的,我用 eval() 解决了这个问题。虽然这是一个解决方案,但我不确定它是最好的解决方案。还有其他想法吗?
function update(data, fieldName, value) {
var evalStr = 'data';
var fieldNameParts = fieldName.split('.');
while (fieldNameParts.length)
evalStr += '[''' + fieldNameParts.shift() + ''']';
evalStr += ' = (value === undefined) ? null : value;';
eval(evalStr);
}
相关文章:
- 循环遍历以数组为值的Javascript对象
- 遍历类元素数组,并在jquery中选择同级元素
- Jquery遍历表元素
- Chrome扩展:遍历不同的页面并收集数据
- 如何遍历包含对象的数组-javascript
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 遍历AngularJs中的对象
- JQuery 遍历当前 SELECT 值
- 循环遍历包含另一个表单的表单
- 使用Yadda和Protractor重用步骤定义,遍历所需文件
- 遍历D3中所有数据点之间的所有值
- 自动遍历所有链接的事件
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 如何使用 document.querySelectorAll 遍历选定的元素
- 使用Javascript反向遍历XML
- 如何使用nodejs步行模块将目录遍历到第一级
- 动态对象遍历与 NodeJS
- Mongoose + NodeJS -遍历文档
- 用变量值而不是文字遍历JSON树,使用NodeJS不起作用
- nodejs-redis循环遍历每个散列键值