Узел: импортировать массив объектов из другого JS-файла?

в файле с именем data.js, у меня большой массив объектов:

var arr = [ {prop1: value, prop2: value},...]

Я хотел бы использовать этот массив в моем узле.приложение JS, но код типа

require('./data.js')

не помогает. Я знаю, как экспортировать функции, но я теряюсь, когда дело доходит до "импорта" массивы. Как добавить данные.JS файл для моего приложения.Яш?

5 ответов


локальные переменные (var whatever) не экспортируются и локальны для модуля. Вы можете определить свой массив на объекте exports, чтобы позволить импортировать его. Вы могли бы создать .JSON-файл, если Ваш массив содержит только простые объекты.

данные.js:

module.exports = ['foo','bar',3];

импорт.js

console.log(require('./data')); //output: [ 'foo', 'bar', 3 ]

[Edit]

Если вам требуется модуль (в первый раз), его код выполняется и экспорт "объект" возвращается и кэшируются. Для все дальнейшие звонки require(), возвращается только кэшированный контекст.

тем не менее, вы можете изменять объекты в код модулей. Рассмотрим этот модуль:

module.exports.arr = [];
module.exports.push2arr = function(val){module.exports.arr.push(val);};

и телефонный код:

var mod = require("./mymodule");
mod.push2arr(2);
mod.push2arr(3);
console.log(mod.arr); //output: [2,3]

вы можете напрямую получить массив JSON или JSON из любого файла в NODEJS нет необходимости экспортировать его из сценария JS

    [ {
        prop1: value, 
        prop2: value
      },
      {
        prop1: val,
        prop2: val2
      },
      ...
   ]

сохраните его в файл JSON, предположим


вы можете просто обернуть массив в функцию.

// myArray.js
export default function iDoReturnAnArray() {
  return ['foo', 'bar', 'baz'];
}

// main.js 
import iDoReturnAnArray from './path/to/myArray';

const unwrappedArray = iDoReturnAnArray();

console.log(unwrappedArray); // ['foo', 'bar', 'baz']

Я знаю, как экспортировать функции, [...]

массив или действительно любое значение можно экспортировать так же, как functions, изменив module.exports или exports:

var arr = [ {prop1: value, prop2: value},...];

exports.arr = arr;
var arr = require('./data').arr;

мы можем использовать разрушать для того чтобы разрешить вашу проблему.

в file1.js, мы создаем массив объектов:

var arr = [{ prop1: "beep", prop2: "boop" }];

затем мы делаем следующее для экспорта:

module.exports = { arr };

затем в другом файле, file2.js, нам нужен массив из file1

const f1 = require("./file1");

журнал результата теста

console.log(f1.arr);