不可变的 JS - 将值提取到数组

Posted

技术标签:

【中文标题】不可变的 JS - 将值提取到数组【英文标题】:Immutable JS - Extracting values to array 【发布时间】:2021-05-28 02:13:49 【问题描述】:

我的 Redux 商店有一条记录,如下所示

const fruitRecord = Immutable.fromJS(
  '8a6sd5v8a6s7fv5': id: '1234', fruit: 'banana',
  'hvth1jk34v23hj2': id: '5678', fruit: 'apple'
  );

如果我控制台记录我得到的记录

console.log(fruitRecord.toArray())
// [Array(2), Array(2)]
// 0: ["8a6sd5v8a6s7fv5", FruitRecord]
// 1: ["hvth1jk34v23hj2", FruitRecord]

我对水果 ID(本例中为 12345678)感兴趣,并将它们放入数组中。

这是我目前正在尝试做的事情:

const fruitName = fruitRecord.map(f => 
    console.log(f.get('id')) // prints 1234 and 5678
    return f.get('id')
)

console.log(fruitName)
// returns a Map

但问题是当尝试使用fruitIds 时,我得到了一个类型对象。我希望这是一个数组['1234', '5678']

如何更改我的代码以获取 id 数组?

** 编辑 ** 将示例更改为可重现

【问题讨论】:

【参考方案1】:

实际上数组是对象类型。例如,如果您记录数组的类型,您将得到“对象”

例子:

const array = [1,2,3],
console.log(typeof array); // this will print object.

我认为您应该尝试打印出“fruitIds”。它将是一个数组的形式。

另一种方法可以如下。

const fruitArray = [];
fruitRecord.map(f => 
    console.log(f.get('id')) // prints 1234 and 5678
    fruitArray.push(f.get('id')); // or frruitArray.push(f.id);
);

【讨论】:

有趣。我不知道。我顺便编辑了示例代码 您可以在 map 函数之前初始化一个数组。然后从地图函数内部推送 id。这可能是一个很好的方法。

以上是关于不可变的 JS - 将值提取到数组的主要内容,如果未能解决你的问题,请参考以下文章

使用不可变 js 将 reducer 状态设置为返回数组

js 不可变的原始值和可变的对象引用

js数据类型

使用可变数组函数时,将变异方法发送到不可变对象错误

Python数据类型的可变与不可变

java中是啥是不可变对象和可变对象