首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用从JSON数组转换的对象填充类型记录/react中的数组

用从JSON数组转换的对象填充类型记录/react中的数组
EN

Stack Overflow用户
提问于 2022-02-20 13:30:23
回答 2查看 1K关注 0票数 1

我有一个JSON文件,其中包含700行设备和一些有关它们的信息(例如序列号、macadress、端口.)。

在另一个文件中,我创建了一个对象,如

代码语言:javascript
运行
复制
type jsonObj = {
serialNumber: string;
macAdress: string;
port: string;
}

现在,我想在循环中用这个jsonDevice对象填充一个表,但不知怎么的,我无法让它工作。

我的代码是这样的:

代码语言:javascript
运行
复制
const ObjectTable: FC = () => {
  const entities: jsonObj[] = [
    {
      serNom: jsonDevices[0].serNom,  //jsonDevices is my json file
      macAdr: jsonDevices[0].macAdr,
      tunPort: jsonDevices[0].tunPort
    },
  ]; 

FC是react中的一个导入,上面的代码正在工作。我收到了带有这一行数据的表输出(例如,jsonDevices.serNom给了我正确的123456789),但是现在我想用json设备中剩下的所有行自动填充整个列表/数组。在Java中,我会用这样的循环来解决这个问题:

代码语言:javascript
运行
复制
for (int i = 0, i<jsonObj.length, i++){
    ObjectTable.add(jsonObj[i].serNom);
    ObjectTable.add(jsonObj[i].macAdr);
    ObjectTable.add(jsonObj[i].tunPort);
    }

请帮帮我。这件事让我头疼。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-20 13:39:49

注意:您的代码将不会编译,因为您已经声明jsonObj类型具有此形状:

代码语言:javascript
运行
复制
type jsonObj = {
  serialNumber: string;
  macAdress: string;
  port: string;
}

但接下来您将尝试创建一个使用不同键名的jsonObj对象数组:

代码语言:javascript
运行
复制
{
  serNom: jsonDevices[0].serNom,  //jsonDevices is my json file
  macAdr: jsonDevices[0].macAdr,
  tunPort: jsonDevices[0].tunPort
}

撇开这一点不说,你的问题的解决方案比看起来要简单得多:Array.prototype.map

代码语言:javascript
运行
复制
const entities: jsonObj[] = jsonDevices.map((device) => {
  return {
    serialNumber: device.serNom,
    macAddress: device.macAdr,
    port: device.tunPort,
  };
});

另一个注意事项:这些缩写变量名很难读懂。我建议你选一个会议然后坚持下去。如果您的JSON文件遵循jsonObj的命名约定,那么您甚至不需要将JSON映射到不同的形状--您只需这样做:

代码语言:javascript
运行
复制
const entities = jsonDevices as jsonObj[];

(这称为类型断言-using,as关键字后面跟着一个类型,以确保TypeScript编译器左边的值是指定的类型。)

票数 0
EN

Stack Overflow用户

发布于 2022-02-20 13:48:05

让我们假设您有一些这样的数据:

代码语言:javascript
运行
复制
[
    { id: 1, name: "test-1" },
    { id: 2, name: "test-random" },
    { id: 3, desc: "444" }
]

有一些数据的结构,创建一个interface

代码语言:javascript
运行
复制
interface SomeInterface {
  id: number;
  name?: string;
  desc?: string;
}

现在很简单,如果JSON输入数据被称为someData,结果数据被称为hmm,那么您可以这样做:

代码语言:javascript
运行
复制
const hmm: SomeInterface[] = [];
someData.map((data) => {
      hmm.push(data as SomeInterface);
});

您还可以通过以下方式简化:

代码语言:javascript
运行
复制
hmm: SomeInterface[] = someData as SomeInterface[];

这里有一个代码框,请随意使用它:https://codesandbox.io/s/dreamy-chatelet-hr5ub6?file=/src/App.tsx:343-456

下面是两个线程,它们都在同一个问题上,讨论了为什么接口多于类型

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71194901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档