ES6 деконструкция массива объектов

у меня есть этот объект

const config = {
    js: {
        files: [
            {
                src: './js/app.js',
                name: 'script.js',
                dest: 'public_html/js/'
            },
            {
                src: './js/admin.js',
                name: 'script.js',
                dest: 'public_html/js/'
            }
        ]
    }
};

и я хочу получить это (получить все источники):

sources = ['./js/app.js', './js/admin.js']

// or, at least
sources = [{'./js/app.js'}]

Я знаю, как это сделать с циклом, но могу ли я сделать это с помощью деконструкции ES6?

что-то типа:

{sources = [{src}]} = config.js;

или

{[{src}] : sources} = config.js;

4 ответов


разрушение не предназначено для такого случая, как этот. Просто используя map() будет легко получить работу.

const config = {
    js: {
        files: [
            {
                src: './js/app.js',
                name: 'script.js',
                dest: 'public_html/js/'
            },
            {
                src: './js/admin.js',
                name: 'script.js',
                dest: 'public_html/js/'
            }
        ]
    }
};

console.log(config.js.files.map(x => x.src));

невозможно уничтожить что-то подобное без цикла или карты из-за массива.

вы можете использовать разрушение в цикле for-of для итерации по файлам:

let srcs = [];
for (let {src} of config.js.files) {
  srcs.push(src);
}

но лучшим подходом было бы использовать методы массива:

// using map
let srcs = config.js.files.map(file => file.src);

// or by using reduce
let srcs = config.js.files.reduce((result, file) => result.concat(file.src), []);

вы можете использовать destructuring с итератором, таким как Array#entries и a for ... of сообщении и временная переменная index.

var config = { js: { files: [{ src: './js/app.js', name: 'script.js', dest: 'public_html/js/' }, { src: './js/admin.js', name: 'script.js', dest: 'public_html/js/' }] } },
    index,
    result = [];

for ({ 0: index, 1: { src: result[index] } } of config.js.files.entries());

console.log(result)

Использовать JavaScript массив.map () метод.

демо

const config = {
    js: {
        files: [
            {
                src: './js/app.js',
                name: 'script.js',
                dest: 'public_html/js/'
            },
            {
                src: './js/admin.js',
                name: 'script.js',
                dest: 'public_html/js/'
            }
        ]
    }
};

var res = config.js.files.map(function(item) {
  return item.src;
});

console.log(res);