循环通过不可变的JS记录

时间:2017-12-08 17:43:36

标签: javascript reactjs immutable.js

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

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);
});

我希望这会将我的选项不可变记录中的每个键/值对写入控制台窗口。但是,它没有打印任何东西,甚至看起来根本没有在地图功能中运行代码。

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

3 个答案:

答案 0 :(得分:0)

使用toMap代替toSeq

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

http://jsfiddle.net/w6h4soay/

答案 1 :(得分:0)

我想使用记录的_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

答案 2 :(得分:0)

您可以使用for of

const options = new Options();

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