【问题标题】:simplest method for Copying all objects into array将所有对象复制到数组中的最简单方法
【发布时间】:2017-09-26 15:52:44
【问题描述】:

我有大约 250 个 json 文件要复制到一个数组中,我的项目基于 vuejs 和 webpack

下面是我的代码

import ch1 from 'assets/json/ar/ch1.json';
import ch2 from 'assets/json/ar/ch2.json';
....
....
import ch100 from 'assets/json/ar/ch100.json';
import ch101 from 'assets/json/ar/ch101.json';
import ch102 from 'assets/json/ar/ch102.json';
import ch103 from 'assets/json/ar/ch103.json';
import ch104 from 'assets/json/ar/ch104.json';
import ch105 from 'assets/json/ar/ch105.json';
import ch106 from 'assets/json/ar/ch106.json';
import ch107 from 'assets/json/ar/ch107.json';
import ch108 from 'assets/json/ar/ch108.json';
import ch109 from 'assets/json/ar/ch109.json';

.....
....
import ch250  from 'assets/json/ar/ch250.json';



var myalldata=  []
// i can  do this manually  as assigning to each index like below
// myalldata[1]=ch1 ;
// myalldata[2]=ch2 ; but its too lengthy code



//here i export all data as array
export default { 
  alldata:myalldata
}

我可以使用 for 循环将所有对象复制到 myalldata 吗?如何做到这一点

【问题讨论】:

  • 你为什么使用import? JSON 是一种数据格式,JSON 不是用来导入代码模块的。您可以进行 AJAX 调用以加载一个 JSON,当它加载时,您加载下一个并将其附加到前一个的结果中。继续这样做,直到加载所有 250 个文件。
  • @Kokodoko 为什么选择 AJAX? JSON 文件(如果它们是静态的)可以使用 webpack 编译,从而减少网络使用。
  • 除了这些,我认为是一本书或游戏之类的章节文件。 AJAX 在这里是一个很好的解决方案,因为为什么要一次加载所有章节 - 为什么不在需要时加载它们呢?然后,您将分散性能负担,而不是在您可能不需要它们时将它们全部加载。
  • 好主意,我正在考虑这个,

标签: javascript webpack vuejs2


【解决方案1】:

根据this,你可以这样做:

let myalldata = [];
for (let i = 1; i < 251; i++)
  myalldata[i] = require("assets/json/ar/ch" + i + ".json");

注意:对于 v2.0.0 以下的版本,您将需要: https://github.com/webpack-contrib/json-loader

【讨论】:

  • 根据json-loader自述文件,它适用于v2.0.0以上的任何版本。
  • 让我检查一下
  • 可以使用 webpack1,我使用的是最新版本 3
【解决方案2】:

如果您将它们全部从同一个模块中导出,您可以执行以下操作:

// 从同一个模块导出所有内容 - exportCh.js

export ch1 from './path/ch1'
export ch2 from './path/ch2'
/// etc

然后导入它们:

这是假设您能够使用 ES8。

import * as myDataSets from './exportCh'
const myalldata = Object.values(myDataSets)

如果你能支持到 ES6:

import * as myDataSets from './exportCh'
const myalldata = Object.keys(myDataSets).reduce((a, d) => a.concat(myDataSets[d]), [])

【讨论】:

  • 此解决方案涉及多个文件,但如果操作正确,会将 JSON 文件编译到 webpack 包中。如果您不介意拥有多个文件,我认为这个答案会更好。
  • 问题涉及多个文件。
  • export ch1 from './path/ch1' 这没有错,我收到错误,预期{
  • @rashidnk - './path/ch1' 导出该文件是默认的吗?如果不是,您需要执行export * as ch1 from './path/ch1' 之类的操作。否则,这可能是您配置转译器的方式。您使用哪些预设进行转译?
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2014-06-22
  • 2019-08-17
  • 2019-04-21
相关资源
最近更新 更多