【问题标题】:Get values by key from Immutable list of maps从不可变的地图列表中按键获取值
【发布时间】:2017-05-30 10:09:08
【问题描述】:

我有一个不可变的映射列表,其中包含(以及其他键)一个“名称”键。我正在尝试获取一组名称。

我的地图列表如下所示:[{'name': 'John', 'age': 23}, {'name': 'Eli', 'age': 30}]

我试过这样做:

var result = myObject.map(function(a) {return a.name;});

但这不起作用。没有返回数组。

如果我这样做result.toArray,我会得到 [undefined, undefined]

【问题讨论】:

  • 你需要将map的返回值赋给某个​​变量。
  • 查看您的代码是否正常运行fiddle.jshell.net/bgesk3u6
  • 你不需要result.toArray。结果本身就是一个数组。
  • 请添加您的问题的minimal reproducible example。 @prasad 已经表明,到目前为止,如果您将对象分配给变量,您的代码将起作用。
  • Map 已经返回了一个数组。那为什么还要用toArray

标签: javascript immutable.js


【解决方案1】:

假设您有一个不可变映射列表,您需要使用get 函数来检索名称。所以以下应该工作:

const list = Immutable.fromJS([{ 'name': 'John', 'age': 23 }, { 'name': 'Eli', 'age': 30 }]);
const result = list.map(a => a.get('name'))); 
console.log(result); // ["John", "Eli"]

像访问常规 javascript 对象一样访问地图的值将不起作用:

const map = Immutable.Map({ name: 'John', age: 23 });
console.log(map.name) // undefined
console.log(map.get('name')) // John

但是,假设所有名称都是固定的,您可以使用不可变记录,如下所示:

const Person = Immutable.Record({ name: '', age: 0 });
const person = new Person({ name: 'John', age: 23 });
console.log(person.name) // John
console.log(person.get('name')) // John

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2021-12-16
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2017-08-25
    • 2017-09-10
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多