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);