reactjs - React 从单个数组创建 2D 数组
问题描述
我正在努力适应 React。我有两个数组。一个数组中的每一项都必须与另一个数组中的每一项相匹配。由此,我需要一个二维数组。
这就是它在 C# 中的样子:
static void Main(string[] args)
{
var listA = new List<int>
{
11,12,13,14
};
var listB = new List<int>
{
21,22
};
var c = new List<Merged>();
foreach(var i in listA)
{
foreach(var j in listB)
{
Merged m = new Merged();
m.datasetId = i;
m.attributeId = j;
c.Add(m);
}
}
foreach(var m in c)
{
Console.WriteLine(m.datasetId + ", " + m.attributeId);
}
//OUTPUT
//11, 21
//11, 22
//12, 21
//12, 22
//13, 21
//13, 22
//14, 21
//14, 22
Console.ReadLine();
}
}
public class Merged
{
public int datasetId { get; set; }
public int attributeId { get; set; }
}
解决方案
这里没有什么特定于 React 的,它实际上只是一个 Javascript 问题。您可以使用与 C# 代码相同的逻辑:
const listA = [11, 12, 13, 14];
const listB = [21, 22];
let merged = [];
for (let i of listA) {
for (let j of listB) {
merged.push([i, j]);
}
}
console.log(merged); // logs actual object
console.log(merged.map(pair => pair.join(", "))); // logs strings
编辑:
根据您的评论,这是在 React 类组件中执行此操作的一种方法。但是,您可以通过多种不同的方式进行设置,并且根据您的数据流,将其放入道具listA
而不是状态可能会更好。此外,带有钩子的函数组件现在非常普遍,并且在许多情况下比类组件更简单。listB
export default class App extends React.Component {
state = { listA: [11, 12, 13, 14], listB: [21, 22], merged: [] };
mergeLists = () => {
let newMerged = [];
for (let i of this.state.listA) {
for (let j of this.state.listB) {
newMerged.push([i, j]);
}
}
return newMerged.map(p => p.join(", "));
};
componentDidMount() {
this.setState({merged: this.mergeLists()});
}
componentDidUpdate(prevProps, prevState) {
if (
this.state.listA !== prevState.listA ||
this.state.listB !== prevState.listB
) {
this.setState({merged: this.mergeLists()})
}
}
render() {
return (
<div>
<ul>
{this.state.merged.map((pair, idx) => (
<li key={idx}>{pair}</li>
))}
</ul>
</div>
);
}
}
推荐阅读
- java - Android:sharedPreferences URI 在应用程序启动时给出 null
- python-3.x - Dataframe Pandas 每行绘制图表
- c# - System.ArgumentException:“参数无效”内存流到图像
- spring-boot - 手动确认 Kafka Batch 侦听器。我在多线程方面做错了什么?
- jmeter - 如何从调试采样器中提取动态最后一个值并在下一个请求中传递它?
- c++ - 如何向 QMenu 添加按钮,或在自定义 QWidgetAction 中重现 QMenu
- authentication - 如何在 Angular 9 中创建linkedin登录?
- routing - 路由器是否使用 ARP 表?
- php - Nodejs 服务器 SSL_ERROR_RX_RECORD_TOO_LONG 的 Nginx 反向代理
- javascript - 登录操作后更改路由 Angular 8