我有这个对象
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;
OR
{[{src}] : sources} = config.js;
答案 0 :(得分:9)
解构不适用于此类案例。只需使用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));

答案 1 :(得分:1)
由于数组的原因,如果没有循环或地图,就无法对此类内容进行解构。
您可以在for-of循环中使用destructuring来迭代文件:
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), []);
答案 2 :(得分:1)
您可以将解构与Array#entries
和for ... of
statement以及临时变量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)
答案 3 :(得分:0)
使用JavaScript Array.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);
&#13;