javascript - 组合多个数组的相同索引的最佳方法
问题描述
我有一个包含三个数组的数组,每个数组包含两个元素。我想改变它,以便我有两个新数组,每个数组都包含来自三个原始数组的相同索引。三个原始数组之一包含对象作为其元素,我也想将它们展平,并且只在新数组中包含它们的值。
这是我到目前为止所拥有的:
const results = [
[0, 1],
[{a: 'a1a1a1', b: 'b1b1b1'}, {a: 'a2a2a2', b: 'b2b2b2'}],
['zero', 'one']
];
let values = [];
let num = 1;
while (num >= 0) {
let cardVals = results.map(c => c[num]);
values.unshift(cardVals);
num--;
};
console.log(values);
我的控制台日志目前看起来像这样:
[ [ 0, { a: 'a1a1a1', b: 'b1b1b1' }, 'zero' ],
[ 1, { a: 'a2a2a2', b: 'b2b2b2' }, 'one' ] ]
但我希望它看起来像这样:
[ [ 0, 'a1a1a1', 'b1b1b1', 'zero' ],
[ 1, 'a2a2a2', 'b2b2b2', 'one' ] ]
我可以在我的地图中检查它是数组还是 js 对象,但是有没有办法不这样做呢?
解决方案
您需要检查元素是否为对象。如果是,则需要用于Object.values()
获取值的数组。然后,您可以使用concat()
将这些连接到结果的当前元素。
const results = [
[0, 1],
[{
a: 'a1a1a1',
b: 'b1b1b1'
}, {
a: 'a2a2a2',
b: 'b2b2b2'
}],
['zero', 'one']
];
let values = [];
for (let i = 0; i < 2; i++) {
let cardValues = [];
results.forEach(el => {
if (typeof el[i] == 'object') {
cardValues = cardValues.concat(Object.values(el[i]));
} else {
cardValues.push(el[i]);
}
});
values.push(cardValues);
}
console.log(values);
推荐阅读
- firebase - 如何减少 Firebase Cloud Firestore 上的读取操作?
- node.js - jenkins作业运行时如何为nodejs项目创建.env文件
- javascript - 如何使用变量获取 localStorage 数组项的值?
- java - 在 Selenium Java 中获取 ElementNotInteractableException 错误
- c++ - 什么是变量类型位(32)?
- google-cloud-platform - 在 GCP 上授予 IAM 权限“dialogflow.agents.restore”所需的 IAM 角色是什么
- swift - 应用程序终止后如何在 iOS 中获取位置或任何更新?
- elasticsearch - 如何在弹性搜索中为每小时访问者构建数据
- c# - 如何使用线程数组调用使用 linq 在 DB EF 上更新的相同函数?
- php - 使用 PHP 和 Imagick 检测图像上的对象位置(右、左)