首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -将INI文件解析为嵌套关联数组

Javascript -将INI文件解析为嵌套关联数组
EN

Stack Overflow用户
提问于 2016-04-09 00:18:08
回答 1查看 593关注 0票数 4

我对Javascript很陌生,我很难将INI格式的文件解析为嵌套的对象。

我所拥有的文件格式如下:

代码语言:javascript
复制
ford.car.focus.transmission=standard
ford.car.focus.engine=four-cylinder
ford.car.focus.fuel=gas

ford.car.taurus.transmission=automatic
ford.car.taurus.engine=V-8
ford.car.taurus.fuel=diesel

purchased=Ford Taurus

我希望这个结构看起来像这样:

代码语言:javascript
复制
{ ford:
  { car:
    { focus:
      {
        transmission: 'standard',
        engine: 'four-cylinder',
        fuel: 'gas'
      }
    }
    { taurus:
      {
        transmission: 'automatic',
        engine: 'V-8',
        fuel: 'diesel'
      }
    }
  }
  purchased: 'Ford Taurus'
}

我将文件存储在数组中的行中,在'\n‘上拆分。我试图编写一个循环中调用的方法,传递我的全局对象,如下所示:

代码语言:javascript
复制
var hash = {};
var array = fileData.toString().split("\n");
for (i in array) {
  var tmp = array[i].split("=");
  createNestedObjects(tmp[0], tmp[1], hash);
}

这应该允许我访问散列对象中的值,如:

代码语言:javascript
复制
hash.ford.car.focus.fuel
# 'gas'

hash.purchase
# 'Ford Taurus'

我尝试过类似于这里建议的东西:Javascript: how to dynamically create nested objects using object names given by an array,但它似乎只设置了嵌套中的最后一项。

代码语言:javascript
复制
{ fuel: 'diesel',
  purchased: 'Ford Taurus' }

我失败的尝试如下:

代码语言:javascript
复制
createNestedObjects(path, value, obj) {
  var keys = path.split('.');
  keys.reduce(function(o, k) {
    if (k == keys[keys.length-1]) {
      return o[k] = value;
    } else {
      return o[k] = {};
    }
  }, obj);
}

但是,它只返回嵌套值的最后一个值:

代码语言:javascript
复制
{ ford: { car: { taurus: { fuel: 'diesel' } } },
  purchased: 'Ford Taurus' }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 00:26:45

函数在分配给它之前,需要检查中间键是否已经存在。

代码语言:javascript
复制
createNestedObjects(path, value, obj) {
  var keys = path.split('.');
  keys.reduce(function(o, k) {
    if (k == keys[keys.length-1]) {
      return o[k] = value;
    } else if (o[k]) {
      return o[k];
    } else {
      return o[k] = {};
    }
  }, obj);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36511294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档