Как объявить несколько объектов одновременно - PullRequest
0 голосов
/ 22 сентября 2018

Я попробовал это, но он только установил значение obj1

let obj1, obj2, obj3, obj4, ..., objn = {} // only obj1 is set, the rest is undefined.

Я посмотрел этот пост: назначил несколько переменных одному значению в Javascript , и они предложили это:

let obj1 = obj2 = obj3 = obj4 = ... = objn = {}

Но вышеизложенное говорит о том, что любое изменение в obj1 повлияет на obj2, obj3, ...

Возможно инициализировать все obj как{} сразу без цикла for?

Ответы [ 6 ]

0 голосов
/ 22 сентября 2018
function declareMultipleObjects(...args){
    var arrayOfObjects = []
    args.forEach(function(each){
        each = new Object();
        arrayOfObjects.push(each);
    })

    alert(arrayOfObjects);}

declareMultipleObjects("obj1", "obj2", "obj3");
0 голосов
/ 22 сентября 2018

Вот интересный способ инициализировать произвольное количество объектов без явной инициализации массива значений.Этот ответ очень похож на ответ Vol7ron , за исключением того, что в нем используется функция генератора для ленивой итерации значений без предварительно выделенного массива.Итератор, возвращаемый initialize(), будет выполнять итерацию только до тех пор, пока требуется назначение деструктурирования , поэтому убедитесь, что вы не используете ... параметр rest в своем задании деструктуризации, иначе ваш итератор будетникогда не прекращать.

function * initialize (fn) { while (true) { yield fn() } }

const [obj1, obj2, obj3, obj4, obj5, obj6] = initialize(() => ({}))

// all initialized
console.log(obj1, obj2, obj3, obj4, obj5, obj6)
// all unique
console.log(new Set([obj1, obj2, obj3, obj4, obj5, obj6]).size)
0 голосов
/ 22 сентября 2018

Используя назначение деструктурирования массива, вы можете использовать карту / уменьшение для создания объектов, но ни один из них не будет таким же быстрым, как цикл for-like.

let [o1,o2,o3] = Array(3).fill().map(()=>({}))

o1.id = '1'
o2.id = '2'
o3.id = '3'

console.log(o1)
console.log(o2)
console.log(o3)
0 голосов
/ 22 сентября 2018

let  {obj1, obj2, obj3 }= {obj1:{}, obj2:{}, obj3:{}};

obj1.id =10;
obj2.id =20;
obj3.id =30;

console.log("obj1",obj1);
console.log("obj2",obj2);
console.log("obj3",obj3);
0 голосов
/ 22 сентября 2018

var [obj, obj2, obj3] = [{"a":1},{"a":2},{"a":3}];

console.log(obj);
console.log(obj2);
console.log(obj3);

Кажется, это работает.

0 голосов
/ 22 сентября 2018

Вы можете использовать Object.assign, эта функция поставляется с синтаксисом ES6, вы можете проверить документацию: Object.assign

const [obj1, obj2, obj3] = [{id: 1}, {id: 2}, {id: 3}];
Object.assign(this, {obj1, obj2, obj3});
...