JavaScript - 导出硬编码数组与创建数组

标签 javascript ecmascript-6

假设我有一个文件 data.js,其中包含一些数据的数组,这些数据将导入某处(例如 React 组件)。

示例 A:

const DATA = [
  {
    firstName: 'jim',
    lastName: 'beam',
    fullName: 'jim beam'
  },
  {
    firstName: 'jack',
    lastName: 'daniels',
    fullName: 'jack daniels'
  }
];

export default DATA;

好的,很酷。事实上,我们正在写出 fullName 属性,它可以通过组合 firstNamelastName 来收集。为了清楚起见,这是一个非常简单的例子,所以请耐心等待。我们也可以这样做:

示例 B:

const DATA = [
  { firstName: 'jim', lastName: 'beam' },
  { firstName: 'jack', lastName: 'daniels' }
];

export default DATA.map(person => ({
   ...person,
   fullName: `${person.firstName} ${person.lastName}`
});

哎呀,我们甚至可以做到这一点!

示例 C:

const DATA = ['jim beam', 'jack daniels'];

export default DATA.map(person => {
  const [firstName, lastName] = person.split(' ');
  return {
    firstName,
    lastName,
    fullName: person
  };
};

因此,假设您有一个庞大的数据列表,其中可以从一个初始值派生出多个值。我的问题是示例 BC 与示例 A 中的所有内容硬编码有何不同?

如果您有数百个项目,示例 BC 的开销可能会小得多,文件大小更小,并且可以减少潜在的拼写错误……但是,我们声明一个数组然后导出一个不同的数组,我认为这可能会导致性能下降?想法?

最佳答案

有一个在访问时评估 fullName 的 getter 的类怎么样? 它提供更小的内存大小,并且没有性能问题,因为每个数据的 fullName 属性在导入和访问之前不会计算。

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    get fullName() {
        return `${this.firstName} ${this.lastName}`
    }
}

let a = new Person('Charles', 'Martel');
console.log(a.fullName)

// expected result: "Charles Martel"

然后您的数据可以声明如下。

const DATA = [
  new Person('jim', 'beam'),
  new Person('jack','daniels')
];

关于JavaScript - 导出硬编码数组与创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815493/

相关文章:

javascript - 每隔几秒更改 HTML 页面中的图像

javascript - 表格行文本 chop

javascript - 我们可以在外部 .ts 文件中声明类中所需的所有变量吗?

javascript - React-Native使用变量值读取常量值

javascript - ES6,Lodash sortBy 2 级对象数组

javascript - Typescript async/await 转换为 yield 错误

javascript - 相当于 React 中的 document.querySelectorAll(),onScroll

javascript - css3或jquery不透明动画效果

Javascript 或 Jquery 在新打开的子窗口中更新 div - 需要语法来更新子窗口 div

javascript - 如何从类属性 TypeScript - Angular 中监听值的变化