javascript - 我有一个数组,里面有数组,这个数组只有 1 个值。我想让它变得简单并转换为数组

标签 javascript arrays

我正在尝试转换[arr1, arr2, arr3] ,其中arr1 , arr2arr3是包含值 1 的数组, 23分别为更简化的形式[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/

相关文章:

javascript - 在 Javascript 中将文件路径模型从 Linux (/) 更改为 Windows (\)

php - 如何在php中将mysql数据库中的数据存储为关联数组

javascript - CSS 转换没有开始/回调没有被调用

javascript - 如何将 $scope 变量传递到自定义指令的字符串模板中?

javascript - 使用 lodash 从字符串数组中查找子字符串

javascript - 有没有办法只提取数组的属性?

javascript - 从文本中剥离标记(以数组形式提供)未通过 Codewars 中的测试

c - 将静态数组作为参数传递

javascript - 如何随机停止超时功能

javascript - 进度条未重置