我正在尝试转换[arr1, arr2, arr3]
,其中arr1
, arr2
和arr3
是包含值 1
的数组, 2
和3
分别为更简化的形式[1, 2, 3]
.
特别是,我通过 API 获取 JSON 数据并推送值并创建数组来存储它们,如下所示:
let parentFolderids = []; // store their names within a local array
for(let i = 0; i < response.data.data.length; i++) {
//const object = response.data.data[i];
//console.log(object.parentIds[0])
parentFolderids.push(response.data.data[i].parentIds);
}
假设结果是 parentFolderids
例如,[ [12], [33], [22] ]
.
我想将其简单地转换为 [12, 33, 22]
。我该怎么做?
最佳答案
这里有很多不同的方法:
使用.map()
(仅提取每个内部数组的第一个元素;适用于所有现代浏览器):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = array.map( x => x[0] );
console.log(flat);
使用.flatMap()
(提取每个内部数组的所有元素;在撰写本文时,IE 或 Edge 不支持*,可以使用 polyfill):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = array.flatMap( x => x );
console.log(flat);
使用.flat()
(与上述相同的支持限制):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = array.flat(1);
console.log(flat);
使用.concat()
和 spread syntax (IE/Edge* 也不支持,polyfills 不可能):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = [].concat(...array);
console.log(flat);
使用for
...of
循环和.push()
(仅提取第一个元素,适用于所有现代浏览器,但不适用于 IE):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = [];
for (const x of array) {
flat.push( x[0] );
}
console.log(flat);
使用普通的旧for(;;)
循环和.push()
(仅提取第一个元素,在任何地方都有效):
const array = [[12], [33], [22], [77, 88, 99]];
const flat = [];
for (let i = 0; i < array.length; i++) {
flat.push( array[i][0] );
}
console.log(flat);
使用普通的旧 for(;;)
循环进行就地修改(仅提取第一个元素,修改原始数组,在任何地方都有效):
const array = [[12], [33], [22], [77, 88, 99]];
for (let i = 0; i < array.length; i++) {
array[i] = array[i][0];
}
console.log(array);
我确信这不是一个详尽的列表。
<小时/>诗。对于上面的示例代码,您也可以将父 ID 直接提取到平面数组中,如下所示:
const parentFolderIds = response.data.data.map( x => x.parentIds[0] );
或者(如果您想要每个项目的所有父 ID,以防有多个项目):
const parentFolderIds = response.data.data.flatMap( x => x.parentIds );
或者(如果您喜欢显式循环):
const parentFolderIds = [];
for (const x of response.data.data) {
parentFolderIds.push( x.parentIds[0] );
}
或者甚至只是:
const data = response.data.data, parentFolderIds = [];
for (let i = 0; i < data.length; i++) {
parentFolderIds.push( data[i].parentIds[0] );
}
无论如何,首先将它们提取到嵌套数组中然后将其展平是没有意义的,至少除非您还需要嵌套数组用于其他用途。
<小时/>*)Edge 78.0 开发版本似乎可以很好地处理所有这些问题 - 正如人们所期望的,因为它使用与 Chrome 相同的 JS 引擎。
关于javascript - 我有一个数组,里面有数组,这个数组只有 1 个值。我想让它变得简单并转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835298/