Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript循环对象并通过转换值创建新对象_Javascript_Typescript - Fatal编程技术网

Javascript typescript循环对象并通过转换值创建新对象

Javascript typescript循环对象并通过转换值创建新对象,javascript,typescript,Javascript,Typescript,鉴于以下目标 const document = { id: 'f8bbe6dd-25e3-464a-90e2-c39038d030e5', fields: { lastname: 'TestLastName', firstname: 'TestFirstName' } } 如何使用typescript/javascript将其转换为接口命中的对象 export interface Hit { id: string; fields: { [key: s

鉴于以下目标

const document = {
  id: 'f8bbe6dd-25e3-464a-90e2-c39038d030e5',
  fields:   {
    lastname: 'TestLastName',
    firstname: 'TestFirstName' 
  } 
}
如何使用typescript/javascript将其转换为接口命中的对象

export interface Hit {
  id: string;
  fields: { [key: string]: string[] };
}
预期结果如下

document = {
  id: 'f8bbe6dd-25e3-464a-90e2-c39038d030e5',
  fields:   {
    lastname: [
      'TestLastName'
    ],
    firstname: [
      'TestFirstName'
    ]
  } 
}

如果您不需要更通用的解决方案,这将起作用:

newDocument = {id: document.id, fields: {lastname: [document.fields.lastname], firstname: [document.fields.firstname]} }

如果您不需要更通用的解决方案,这将起作用:

newDocument = {id: document.id, fields: {lastname: [document.fields.lastname], firstname: [document.fields.firstname]} }

编写一个映射对象属性的小函数,有点像映射,但用于对象

type Hash<T> = {[index: string]: T};

function map<T, U>(
  obj: Hash<T>,
  fn: (val: T, prop?: string, obj?: any) => U,
  thisObj?
): Hash<U> {
  const result: Hash<U> = {};

  Object.keys(obj).forEach(key => result[key] = fn.call(thisObj, obj[key], key, obj));

  return result;
}

编写一个映射对象属性的小函数,有点像映射,但用于对象

type Hash<T> = {[index: string]: T};

function map<T, U>(
  obj: Hash<T>,
  fn: (val: T, prop?: string, obj?: any) => U,
  thisObj?
): Hash<U> {
  const result: Hash<U> = {};

  Object.keys(obj).forEach(key => result[key] = fn.call(thisObj, obj[key], key, obj));

  return result;
}
你可以简单地分开

export interface Hit {
  id: string;
  fields: Field;
}

export interface Field {
  [index: string]:string[];
}
灵感来自下面的答案,你可以在

你可以简单地分开

export interface Hit {
  id: string;
  fields: Field;
}

export interface Field {
  [index: string]:string[];
}
灵感来自下面的答案,你可以在


谢谢你的回复。不过我需要一个更通用的解决方案。谢谢您的回复。不过,我需要一个更通用的解决方案。对不起,我不确定您是否阅读了我的问题,但您的解决方案与我提出的问题无关。您的问题是[key:string]:string[]行,其中key可以是任何内容?当然,但这与拆分接口有什么关系?我不是在寻找接口定义。请尝试从我共享的链接中获取一些提示。您可以在那里创建通配符。这只是参考。如果它没有帮助尝试其他方法,我不确定你是否阅读了我的问题,但你的解决方案与我提出的问题无关。你的问题是[key:string]:string[]行,key可以是任何东西?当然,但这与拆分接口有什么关系?我不是在寻找接口定义。请尝试从我共享的链接中获取一些提示。您可以在那里创建通配符。这只是参考。如果它没有帮助,尝试其他东西