遍历不可变的 JS 记录

Loop Through Immutable JS Record

我是 ImmutableJS 库的新手,我一直在解决这个问题。我有一个名为 Options 的不可变记录对象。我希望能够遍历此记录,获取记录中每个项目的键和值。这是我的选项模型的样子:

export class Option extends Record ({
  height: '10px',
  width: '47px',
  title: 'foo',
  isAvailable: false
}) {
  constructor(props) {
    if (!props) {
      super();
      return;
    }
  }
}

我已经编写了以下代码来遍历我的选项记录中的每个元素,但它似乎不起作用:

var options = new Options();
options.toSeq().map((value, key) => {
  console.log(key + ': ' + value);
});

我希望这会将我的选项不可变记录中的每个 key/value 对写入控制台 window。但是,它不打印任何内容,甚至似乎根本 运行 地图函数中的代码。

如果您知道这里出了什么问题,请告诉我。提前致谢! :)

使用toMap代替toSeq

var options = new Options();
options.toMap().map((value, key) => {
  console.log(key + ': ' + value);
});

http://jsfiddle.net/w6h4soay/

我喜欢使用 Record 的 _values_keys_defaultValues_iterate 属性。我认为下划线表示它们是私有的,但我找不到其他方法!

class Option extends Immutable.Record({
  height: '10px',
  width: '47px',
  title: 'foo',
  isAvailable: false
}) {}

var option = new Option();

console.log(option._keys); 
//  ["height", "width", "title", "isAvailable"]

console.log(option._values.toJS()); 
//  [undefined, undefined, undefined, undefined]

console.log(option._defaultValues); 
// {
//   height: '10px',
//   width: '47px',
//   title: 'foo',
//   isAvailable: false
// }

// i like this one the best
option.__iterate((item, key) => console.log(key, item));
// height, 10px
// width, 47px
// title, foo
// isAvailable, false

您可以使用 for of:

const options = new Options();

for (const [key, value] of options) {
  console.log(`${key}:${value}`);
}